ローカルのJavaVM一覧を表示するツールを作ってみた。
ローカルのJavaVM一覧を表示するツールを作ってみた。
- jvmstatのAPIを呼び出して情報を取得し表示します。
- なので、実行時にtools.jarをクラスパスに通す必要があります。
- 属性はとりあえず全部表示するようにしてみた。
import java.net.URISyntaxException; import java.util.List; import java.util.Set; import sun.jvmstat.monitor.HostIdentifier; import sun.jvmstat.monitor.Monitor; import sun.jvmstat.monitor.MonitorException; import sun.jvmstat.monitor.MonitoredHost; import sun.jvmstat.monitor.MonitoredVm; import sun.jvmstat.monitor.VmIdentifier; /** * ローカルのJavaVM一覧を表示する。 <br/> * ※tools.jarが必要なのでパスに通して使うこと! * * <pre> * 例) java -cp tools.jar JVMList * </pre> */ public class JVMList { public static void main( String[] args ) throws MonitorException, URISyntaxException { MonitoredHost monitoredHost = MonitoredHost.getMonitoredHost(new HostIdentifier((String)null)); for ( Integer vmid : (Set<Integer>)monitoredHost.activeVms() ) { MonitoredVm vm = null; String vmidString = "//" + vmid + "?mode=r"; VmIdentifier id = new VmIdentifier(vmidString); try { vm = monitoredHost.getMonitoredVm(id, 0); System.out.println( new StringBuilder().append("\n--- pid : ").append(vmid) ); for ( char i = 'a'; i < 'z'; i++ ) { List<Monitor> list = vm.findByPattern( String.valueOf(i)); for ( Monitor m : list ) { System.out.println( new StringBuilder().append(" ").append( m.getName()) .append( " = " ).append( String.valueOf(m.getValue())).toString() ); } } } finally { if ( vm != null ) { monitoredHost.detach(vm); } } } } }
実行結果です。
--- pid : 1056 java.ci.totalTime = 178022887 java.cls.loadedClasses = 469 java.cls.sharedLoadedClasses = 0 java.cls.sharedUnloadedClasses = 0 java.cls.unloadedClasses = 0 .... --- pid : 2300 java.ci.totalTime = 394414503 java.cls.loadedClasses = 1359 java.cls.sharedLoadedClasses = 0 ....