2010-12-08 2 views
1

In einem Projekt, das stark Aufgaben verwendet, möchte ich die Parallelität "von innen" aufzeichnen.Google App Engine: Wie JVM-Instanzen eindeutig identifiziert/Parallelität gemessen werden?

Auf der Konsole, ich sehe, dass GAE automatisch startet neue Instanzen von JVMs (bis zu 10-12), wenn Hunderte/Tausende von Aufgaben eingereiht sind. Dann laufen sie gut.

Aber ich möchte aufzeichnen, welche Aufgabe auf welcher Instanz für Tracability und Parallelitätsmessung ausgeführt wurde.

Gibt es irgendeine GAE- oder Systemeigenschaft, die ich eindeutig erhalten könnte die JVM identifizieren, auf der eine bestimmte Aufgabe ausgeführt wird?

Grüße didier

Antwort

3

Nach bestem Wissen und Gewissen, es gibt kein in Art und Weise gebaut, dies zu tun. Was Sie jedoch tun können, ist eine statische Variable zu haben, die auf etwas Einzigartiges - wie eine UUID - initialisiert wird. Daher können Sie feststellen, ob zwei Anforderungen von derselben Laufzeitumgebung verarbeitet wurden, wenn sie dieselbe statische UUID aufweisen.

+0

Hallo Nick, vielen Dank für diese Idee, dass ich versuchen werde. Zusätzliche Frage: GAE dupliziert Elemente aus der 1. JVM, wenn sie die zweite usw. startet. Wird diese statische UUID nicht repliziert, wenn die Klasse in der neuen Maschine neu geladen/dupliziert wird? Danke Didier –

+1

@Didier Nein, es tut das nicht - jede JVM wird frisch gestartet und lädt Ihre Classfiles unabhängig. –

+1

Nick, vielen Dank, ich werde es live ausprobieren und die Ergebnisse hier posten –

1

This app könnte Ihnen den Einstieg erleichtern - der Autor wollte mit der Verfolgung neuer Instanzen experimentieren und enthält Quellcode.

AppEngine startet und stoppt automatisch JVM und Threads. Diese Anwendung wurde entwickelt, um einige Daten darüber zu sammeln, wie und wann dies geschieht. Es schafft UUID und Seitenzugriffszähler und speichert sie in verschiedenen Bereichen:

* in the Memcache 
* as a static field (in JVM memory) 
* as a ThreadLocal