gpt4 book ai didi

java - 如何使用 Attach API 列出当前正在运行的 JVM

转载 作者:行者123 更新时间:2023-11-29 08:56:09 47 4
gpt4 key购买 nike

环境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中有描述:

The list is an aggregation of the virtual machine descriptor lists obtained by invoking the listVirtualMachines method of all installed attach providers. If there are no Java virtual machines known to any provider then an empty list is returned.

粗体格式是我添加的。

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

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

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

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com