gpt4 book ai didi

java - JMX 结果令人困惑

转载 作者:行者123 更新时间:2023-12-01 13:32:59 24 4
gpt4 key购买 nike

过去几天我一直在尝试学习 JMX,但现在很困惑。

  1. 我编写了一个简单的 JMX 程序,它使用包 java.lang.management 的 API 并尝试提取 Pid、CPU 时间、用户时间。在我的结果中,我只获得当前 JVM 线程的结果,即我的 JMX 程序本身,但我认为我应该获得同一台机器上 JVM 上运行的所有进程的结果。我如何获取 JVM(LINUX/WD)中运行的所有 java 进程的 pid、cpu 时间、用户时间。
  2. 我应该如何获取我的机器(LINUX/WD)中运行的所有非java进程的pid、cpu时间、用户时间。

我的代码如下:

public void update() throws Exception{
final ThreadMXBean bean = ManagementFactory.getThreadMXBean();
final long[] ids = bean.getAllThreadIds();
final ThreadInfo[] infos = bean.getThreadInfo(ids);
for (long id : ids) {
if (id == threadId) {
continue; // Exclude polling thread
}
final long c = bean.getThreadCpuTime(id);
final long u = bean.getThreadUserTime(id);
if (c == -1 || u == -1) {
continue; // Thread died
}
}
String name = null;
for (int i = 0; i < infos.length; i++) {
name = infos[i].getThreadName();
System.out.print("The name of the id is /n" + name);
}
}

我总是得到结果:

The name of the id is Attach Listener
The name of the id is Signal Dispatcher
The name of the id is Finalizer
The name of the id is Reference Handler
The name of the id is main

我的机器上运行着一些其他 java 进程,它们没有包含在 bean.getAllThreadIds() API 的结果中。

最佳答案

啊,现在我明白你想做什么了。恐怕我有一些坏消息。

通过 ManagementFactory 公开的 API 允许您仅监视代码运行所在的 JVM。要监视其他 JVM,您必须使用 JMX Remoting API (javax.management.remote),这会带来您必须处理的一系列全新问题。

听起来您想要做的基本上是使用开箱即用的 JDK 提供的库存 API 编写自己的管理控制台。简短的回答:你无法从这里到达那里。稍微长一点的答案:你可以从这里到达那里,但是路很长,蜿蜒,全程都是上坡,当你完成后,你很可能会希望你走了一条不同的路线(阅读:使用已编写的管理控制台)。

我建议您使用JConsole或其他一些管理控制台来监视您的应用程序。根据我的经验,通常唯一重要的是人类(而不是程序)解释各种 MBean 提供的统计信息,这些 MBean 的引用可通过 ManagementFactory 静态方法获取。毕竟,如果一个程序能够访问其他进程使用的 CPU 量,那么它对该信息有什么用处(除了以某种人类可读的格式提供它)?

关于java - JMX 结果令人困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21446955/

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