ENV
tomcat7 jdk1.6

使用JSP尝试:

<%@ 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。谁能给我一些建议?谢谢。

最佳答案

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


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


我添加了粗体格式。

VirtualMachine#list()方法仅返回当前JVM进程已知的正在运行的JVM实例。每个此类过程都通过AttachProvider的实现来标识。我只能猜测,但我假设调用AttachProvider#providers()将产生一个空列表。如果是这种情况,请确保在类路径上添加可访问的AttachProvider的实现。请注意,这些提供程序也必须对ClassLoaderVirtualMachine可见。

AttachProvider的示例例如是HotSpotAttachProvider,它是列出任何HotSpot虚拟机的运行实例的提供程序。

关于java - 如何使用附加API列出当前正在运行的JVM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20216237/

10-12 03:59