{"id":1941,"date":"2013-07-06T12:14:06","date_gmt":"2013-07-06T10:14:06","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=1941"},"modified":"2013-08-26T17:33:24","modified_gmt":"2013-08-26T15:33:24","slug":"kommandozeilenprogramm-jcmd-fr-diagnosekommandos","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/07\/kommandozeilenprogramm-jcmd-fr-diagnosekommandos\/","title":{"rendered":"Kommandozeilenprogramm jcmd f&uuml;r Diagnosekommandos"},"content":{"rendered":"<p>Mit dem Kommandozeilenprogramm jcmd lassen sich Diagnosekommandos zu einer laufenden JVM schicken. Die Java-Programme werden wieder \u00fcber eine PID identifiziert, die jcmd auch anzeigen kann:<\/p>\n<pre>$ <b>jcmd.exe<\/b><\/pre>\n<pre><b><\/b>2484 C:\\Users\\Christian\\eclipse\\\\plugins\/org.eclipse.equinox\u2026<\/pre>\n<pre>18868 sun.tools.jcmd.JCmd<\/pre>\n<p>Eclipse hat die PID 2484 und das Tool selbst \u2013 das bei jedem Starten nat\u00fcrlich eine neue PID bekommt \u2013 18868.<\/p>\n<p>Interessant wird jcmd dadurch, dass sich Diagnose-Kommandos senden lassen. Als erstes steht die PID, dann folgt das Kommando. Um ein \u00dcbersicht \u00fcber die H\u00e4ufigkeit von geladen Klassen zu bekommen ist GC.class_histogram zu nutzen:<\/p>\n<pre>$ jcmd.exe 2484 GC.class_histogram<\/pre>\n<pre>2484:<\/pre>\n<pre>num #instances #bytes class name<\/pre>\n<pre>----------------------------------------------<\/pre>\n<pre>1: 600676 40906520 [C<\/pre>\n<pre>2: 549996 13199904 java.lang.String<\/pre>\n<pre>3: 121570 4862800 java.util.WeakHashMap$Entry<\/pre>\n<pre>4: 117120 3747840 java.lang.ref.WeakReference<\/pre>\n<pre>5: 63926 2730616 [Ljava.lang.String;<\/pre>\n<pre>\u2026<\/pre>\n<p>Auf der Hilfeseite sind die Kommandos nicht aufgef\u00fchrt, weil sie abh\u00e4ngig von der jeweiligen JVM sind und nicht im Tool jcmd selbst verankert sind. Daher m\u00fcssen sie dynamisch von einem laufenden Java-Programm erfragt werden. Unser Elcipse-Prozess hatte die PID 2484, und dann kommt die Option help zum Einsatz:<\/p>\n<pre>$ <b>jcmd.exe 2484 help<\/b><\/pre>\n<pre>2484:<\/pre>\n<pre>The following commands are available:<\/pre>\n<pre>VM.native_memory<\/pre>\n<pre>VM.check_commercial_features<\/pre>\n<pre>VM.unlock_commercial_features<\/pre>\n<pre>ManagementAgent.stop<\/pre>\n<pre>ManagementAgent.start_local<\/pre>\n<pre>ManagementAgent.start<\/pre>\n<pre>Thread.print<\/pre>\n<pre>GC.class_stats<\/pre>\n<pre>GC.class_histogram<\/pre>\n<pre>GC.heap_dump<\/pre>\n<pre>GC.run_finalization<\/pre>\n<pre>GC.run<\/pre>\n<pre>VM.uptime<\/pre>\n<pre>VM.flags<\/pre>\n<pre>VM.system_properties<\/pre>\n<pre>VM.command_line<\/pre>\n<pre>VM.version<\/pre>\n<pre>help<\/pre>\n<pre>For more information about a specific command use 'help &lt;command&gt;'.<\/pre>\n<p>Wie die letzte Zeile verr\u00e4t, gibt ein angeh\u00e4ngtes Kommando weitere Informationen, etwa<\/p>\n<pre>$ <b>jcmd.exe 2484 help GC.heap_dump<\/b><\/pre>\n<pre>2484:<\/pre>\n<pre>GC.heap_dump<\/pre>\n<pre>Generate a HPROF format dump of the Java heap.<\/pre>\n<pre>Impact: High: Depends on Java heap size and content. Request a full GC unless th<\/pre>\n<pre>e '-all' option is specified.<\/pre>\n<pre>Permission: java.lang.management.ManagementPermission(monitor)<\/pre>\n<pre>Syntax : GC.heap_dump [options] &lt;filename&gt;<\/pre>\n<pre>Arguments:<\/pre>\n<pre>filename : Name of the dump file (STRING, no default value)<\/pre>\n<pre>Options: (options must be specified using the &lt;key&gt; or &lt;key&gt;=&lt;value&gt; syntax)<\/pre>\n<pre>-all : [optional] Dump all objects, including unreachable objects (BOOLE<\/pre>\n<pre>AN, false)<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Mit dem Kommandozeilenprogramm jcmd lassen sich Diagnosekommandos zu einer laufenden JVM schicken. Die Java-Programme werden wieder \u00fcber eine PID identifiziert, die jcmd auch anzeigen kann: $ jcmd.exe 2484 C:\\Users\\Christian\\eclipse\\\\plugins\/org.eclipse.equinox\u2026 18868 sun.tools.jcmd.JCmd Eclipse hat die PID 2484 und das Tool selbst \u2013 das bei jedem Starten nat\u00fcrlich eine neue PID bekommt \u2013 18868. Interessant wird jcmd [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-1941","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=1941"}],"version-history":[{"count":3,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1941\/revisions"}],"predecessor-version":[{"id":2162,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1941\/revisions\/2162"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=1941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=1941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=1941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}