如何使用Attach API列出当前运行的JVM

时间:2013-11-26 11:47:28

标签: java jboss jvm aop cglib

ENV tomcat7 jdk1.6

使用JSP

TRIED

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"  pageEncoding="ISO-8859-1"%>
<%@ page import ="com.sun.tools.attach.VirtualMachine" %>
<%@ page import ="com.sun.tools.attach.VirtualMachineDescriptor" %>

<%  
   out.print("Number of runtime jvms : "+VirtualMachine.list().size());
   for (int i=0; i<VirtualMachine.list().size(); i++) {
       VirtualMachineDescriptor vi = VirtualMachine.list().get(i);
       out.println("**PID :"+vi.id()+" **DISPLAYNAME:"+vi.displayName());
   }
%>

结果

Number of runtime jvms : 0

我预计它不会是0。有几个正在运行的JVM。谁能给我一些建议?感谢。

1 个答案:

答案 0 :(得分:0)

原因在VirtualMachine#list()的javadoc中描述:

  

该列表是虚拟机描述符列表的聚合   通过调用所有已安装的listVirtualMachines方法获得   附加提供商。如果没有任何已知的Java虚拟机   然后返回一个空列表。

我添加了大胆的格式。

VirtualMachine#list()方法仅返回当前JVM进程已知的正在运行的JVM实例。每个这样的过程都由AttachProvider的实现来识别。我只能猜测,但我认为调用AttachProvider#providers()将产生一个空列表。如果是这种情况,请确保在类路径中添加AttachProvider可访问的实现。请注意,这些提供商也必须对ClassLoader的{​​{1}}可见。

VirtualMachine的示例是HotSpotAttachProvider,它是列出正在运行任何HotSpot虚拟机实例的提供商。