gpt4 book ai didi

java - 如何从脚本中分析 Java 线程状态摘要

转载 作者:太空宇宙 更新时间:2023-11-04 13:40:10 28 4
gpt4 key购买 nike

我知道像 jvisualvm 这样的工具和 JConsole是监视 java 进程线程状态的良好可视化工具。我想要的是一个命令行工具,它调用一个java进程(或附加到一个进程),并且对于给定的线程(按名称),在进程退出时打印该线程状态的摘要。例如:

$ sometool $pid
$ sometool java -jar myapp.jar -a 1 -b 2 ...
20% runnable
50% waiting
30% blocked

我需要这个,因为我正在运行实验,使用不同的参数调用我的java进程数十次,并且我想绘制各种运行的等待/总时间的图表。 jvisualvm 没有任何用处,除非它可以在根本没有 UI 的命令行模式下调用。通过上述工具也许可以实现这一点,但我不是 Java 分析方面的专家。

更新:找到MXBeans ,但我必须编写一些代码来检索数字。我会尝试一下,但有一个现成的解决方案就更好了。

最佳答案

我最终使用 ThreadMXBean 实现了我自己的分析器就在类(class)里面。我在开始时启用了 CPU 监控并定期记录时间分割,最后检查这两个功能:

protected static void initMXBean()
{
mxBean = ManagementFactory.getThreadMXBean();
mxBean.setThreadContentionMonitoringEnabled(true);
mxBean.setThreadCpuTimeEnabled(true);
}

protected static void logMXBean()
{
long[] threadIds = mxBean.getAllThreadIds();
ThreadInfo[] threadInfos =
mxBean.getThreadInfo(threadIds);

for (ThreadInfo threadInfo : threadInfos) {
System.out.println(
threadInfo.getThreadName() +
" blocked " + threadInfo.getBlockedTime()/1e6 +
" waited " + threadInfo.getWaitedTime()/1e6 +
" cpu " + mxBean.getThreadCpuTime(threadInfo.getThreadId())/1e9
);
}

}

关于java - 如何从脚本中分析 Java 线程状态摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31306208/

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