2009-04-16 5 views
22

Ich stelle fest, dass ähnliche Fragen zu diesem Thema hier auf SO gefragt wurden, aber lassen Sie mich genau beschreiben, was ich tun muss:Die beste Möglichkeit, die Speichernutzung in einer Java-Anwendung zu profilieren?

Ich habe eine Reihe von Tests, die eine Befehlszeile Java-Anwendung ausführen und ich möchte Hinzufügen von Speicherprofilen zu ihnen. Eine Option, die ich sehe, wäre, Code (möglicherweise unter Verwendung von Tools/Bibliotheken von Drittanbietern) zu meiner Anwendung hinzuzufügen, die einen Speicher-Snapshot bereitstellen würde. Eine andere Möglichkeit wäre, ein Drittanbieter-Tool zu verwenden, das meine Anwendung und die JVM für mich verwaltet/instrumentiert (und im Idealfall nicht erfordert, dass ich meinen Code ändere). Ich denke an etwas wie Valgrind, aber für Java. Wenn möglich auch Open Source.

Was ich wirklich tun möchte, ist die Speichertests einzurichten, so dass meine Speicherauslastung in regelmäßigen Abständen überwacht wird, sagen wir jede Sekunde, und in eine Textdatei ausgegeben wird. Auf diese Weise könnte ich sehen, ob die Speichernutzung im Laufe der Zeit oszilliert/zunimmt/abnimmt. Ich bin auch in der Lage, die Max- und Min-Peaks zu berechnen.

Hat jemand hier so etwas getan?

Vielen Dank im Voraus.

Antwort

16

Mit etwas wie JProfiler müssen Sie nur bestimmte Parameter zur JVM hinzufügen. Es verwendet JVMTI.

Ich denke, Sie sollten auf Profiler lesen und genau, was sie für Sie tun können. Ich empfehle auch, auf JVMTI nachzulesen.

Das JVMTM Tool Interface (JVM TI) ist eine neue native Programmierschnittstelle für die Verwendung durch Werkzeuge. Es bietet eine Möglichkeit, den Status zu überprüfen und die Ausführung von Anwendungen zu steuern, die in der Java Virtual Machine (JVM) ausgeführt werden. JVM TI unterstützt die volle Bandbreite von Tools, die Zugriff auf den JVM-Status benötigen, einschließlich, aber nicht beschränkt auf: Tools für die Profilerstellung, das Debugging, die Überwachung, die Threadanalyse und die Coverage-Analyse.

Hinweis: JVM TI ersetzt die Java Virtual Machine Profiler-Schnittstelle (JVMPI) und die Java Virtual Machine Debug-Schnittstelle (JVMDI). JVMPI und JVMDI werden in der nächsten Hauptversion von J2SETM entfernt.

6

Yourkit hat auch einen ziemlich guten Profiler

2

Mehrere Profiler wie yourkit hat APIs für die Zuweisungen Speicher zu verfolgen. Eine weitere Möglichkeit ist hier Monitoring-Tools wie jxinsight oder glassbox oder jamon

Zur Analyse von Heap-Dumps der Eclipse Memory Analyzer das beste Werkzeug ist, kann man bekommen. Es ist kostenlos und Open Source, so dass Sie die Analyse von Heap-Dumps beliebig automatisieren können.

1

Zusätzlich zu den obigen Antworten habe ich auch Profiler vor ein paar Jahren genossen. Ich weiß nicht, ob das hilft.

2

Ich entwickle in Eclipse, aber ich habe Netbeans um seinen ausgezeichneten Profiler zu verwenden. Es ist begrenzt im Vergleich zu einigen kommerziellen, aber immer noch gut genug, um die meisten Engpässe zu erkennen.

+0

Der Netbeans-Profiler wurde in den VisualVM-Analyzer mit Java 6 u10 eingefügt. Es ist sehr schön! –

2

Sie können jrcmd verwenden, das ein Befehlszeilenprogramm ist, das mit der JRockit JVM geliefert wird. Wenn Sie die pid des Java-Prozess wissen, können Sie einfach tun:

JROCKIt_HOME\bin\jrcmd <pid> print_object_summary 

und es wird Ihnen:

31.8% 3198k 41907 -137k [C 
11.9% 1196k  300  +0k [B 
11.4% 1151k 49118  +6k java/lang/String 
6.1% 612k  5604  +0k java/lang/Class 
4.3% 431k  2388  +0k [I 
3.5% 353k 15097  +0k java/util/HashMap$Entry 
... 
+0

Ich bekomme: Kann Socket-Datei nicht öffnen: Zielprozess reagiert nicht oder HotSpot VM nicht geladen , wenn ich das versuche – Zubair

1

I dynaTrace Production Edition empfehlen. Tolles Tool zum Profilieren von Speicheranwendungen. Niedriger Overhead und 100% der ausgeführten Transaktionen.

Verwandte Themen