【问题标题】:How to list current running JVMs using the Attach API如何使用 Attach API 列出当前正在运行的 JVM
【发布时间】:2014-01-20 21:57:10
【问题描述】:

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

【问题讨论】:

    标签: java jboss jvm aop cglib


    【解决方案1】:

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

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

    粗体格式是我添加的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      相关资源
      最近更新 更多