# Von VisualVM gesammelte Daten automatisch speichern



## Royal2320 (6. Dez 2010)

Hi zusammen,

Ich hoffe jemand kann mir bei folgendem Problem behilflich sein. Ich möchte CPU- und Memory-Auslastungsdaten von selbstgeschriebenen Programmen (Clojure, JRuby und Scala) sammeln. Ich bin auf der Suche nach einem geeigneten Tool auf VisualVM gestossen, welches die Daten die ich brauche grundsätzlich zu liefern scheint. Wenn ich die Programme ausführe, werden die Prozesse auf jeden Fall von VisualVM erkannt. 

Da bin ich aber auch schon bei meinem Problem. Die Programme die ich überwachen möchte brauchen kaum mehr als eine Sekunde um durchzulaufen und dann ist der Prozess auch schon wieder weg und mit ihm alle Daten die VisualVM evtl. gesammelt hat. Ich suche also nach einer Möglichkeit solche Leistungsdaten zu sammeln ohne die Messung manuell starten zu müssen und mit der Möglichkeit die Daten automatisch zu speichern, sodass sie auch noch verfügbar sind, wenn der Prozess nicht mehr läuft.

Ist das mit VisualVM möglich? Wenn ja, wie? Wenn nein, gibt es alternative Tools die sowas können?

Vielen Dank.


----------



## musiKk (7. Dez 2010)

Du kannst Dir mal das Tool [c]jstat[/c] ansehen. Das ist im JDK dabei.
Ob es sonderlich sinnvoll ist, bei einem so kurz laufenden Programm irgendwelche Aussagen zur Speicherauslastung zu treffen, ist allerdings eine andere Frage.


----------



## Royal2320 (7. Dez 2010)

Naja, ich bin erst auf Aufbau der Umgebung und die Programme mit denen ich teste sind natürlich sehr simpel. Die Programme mit denen ich schlussendlich arbeiten will, sind dann schon etwas komplizierter. Die habe ich aber leider noch nicht, da die ein Kollege von mir schreibt.

Leider scheine ich mit jstat genau das gleiche Problem zu haben. Ich kann das ja gar nicht starten, ohne eine Prozess-ID anzugeben, die ich gar nicht kenne. Ich kann wirklich kaum glauben, dass ich der einzige bin, der dieses Problem hat. Naja, wenns wirklich nicht anders geht, müsste ich meinem Kollegen sagen, er solle einen Loop um das ganze Programm schreiben. Dann läufts halt bis ich den Prozess kille. Mache ich aber echt nicht gerne, vor allem weil ich bezweifle, dass das die Gleiche Aussagekraft hat.

Jemand noch eine Idee?


----------



## musiKk (7. Dez 2010)

Royal2320 hat gesagt.:


> Ich kann das ja gar nicht starten, ohne eine Prozess-ID anzugeben, die ich gar nicht kenne.



Naja, ich persönlich würde ich mir ein Perl-Skript schreiben, welches den Prozess startet und mit der PID jstat aufruft.


----------



## Royal2320 (8. Dez 2010)

Hm, wäre wohl eine Möglichkeit. Blöderweise habe ich noch nie mit Perl gearbeitet. Bräuchte wahrscheinlich Unterstützung. Vor allem das auslesen der PID stelle ich mir noch schwierig vor. Ich kanns ja bei Gelegenheit mal versuchen, ich melde mich wieder wenns nicht klappt.


----------



## Royal2320 (11. Dez 2010)

Bin noch nicht dazu gekommen mich an dem Script zu versuchen. Hab mir heute aber jstat genauer angesehen. Leider finde ich nirgends eine Option, mit der man CPU Daten sammeln könnte. Ich vermute stark, dass jstat das nicht anbietet, was bedeuten würde, dass ich ein alternatives Tool brauche.

Was das Memory Monitoring angeht, gibts ja diese gccapacity Option, die sowas liefert. Kann mir jemand sagen, was die verschiedenen Werte (New generation capacity, survivor space capacity, eden space capacity, old generation capacity, permanent generation capacity) genau aussagen. Bzw. welche Spalte muss ich nehmen, um auszusagen wie viel Memory mein Programm zur Zeit verbraucht?


----------

