Java ist auch eine Insel

Dienstag, Mai 27, 2008

Paket sun.jvmstat: Wie man selbst ein jps schreibt

jps (Java Virtual Machine Process Status Tool) ist ein Utility, welches neu bei Java 5 ist. Es zeigt die aktuellen laufenden Java VM-Instanzen an.


$ jps 
2256
2960 Jps

$ jps -mlvV
1692 sun.tools.jps.Jps -mlvV -Dapplication.home=C:\Programme\Java\jdk1.6.0 -Xms8m
2256 -Xbootclasspath/a:C:\PROGRA~1\Java\JRE16~1.0\lib\deploy.jar;C:\PROGRA~1\Java\JRE16~1.0\lib\plugin.jar -Xmx96m ...

Um ein eigenes jps zu schreiben ist, ist das Java-Archiv tools.jar aus dem lib-Verzeichnis des JDK im Klassenpfad nötig. Dort gibt es das zentrale (interne!) Paket sun.jvmstat.


import java.util.Set;
import sun.jvmstat.monitor.*;

public class T
{
@SuppressWarnings("unchecked")
public static void main( String[] args ) throws Exception
{
MonitoredHost monitoredhost = MonitoredHost.getMonitoredHost( "//localhost" );
for ( int id : (Set<Integer>) monitoredhost.activeVms() ) {
VmIdentifier vmidentifier = new VmIdentifier( "" + id );
MonitoredVm monitoredvm = monitoredhost.getMonitoredVm( vmidentifier, 0 );
System.out.printf( "%d %s %s %s%n", id,
MonitoredVmUtil.mainClass( monitoredvm, true ),
MonitoredVmUtil.jvmArgs( monitoredvm ),
MonitoredVmUtil.mainArgs( monitoredvm ) );
}
}
}




Die Ausgabe ist



2984  -Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -XX:MaxPermSize=256M null 
360 T -Dfile.encoding=Cp1252 null
2256 -Xbootclasspath/a:C:\PROGRA~1\Java\JRE16~1.0\lib\deploy.jar;C:\PROGRA~1\Java\JRE16~1.0\lib\plugin.jar -Xmx96m ...

Nützlich kann das ganze sein, um etwa herauszufinden, ob schon ein Exemplar des aktuellen Programms läuft. Denn das zweite Programm findet über mainClass() zweimal die gleiche Klasse.

AddThis Social Bookmark Button