我想问一下,是否有一些简单的方法来确定java中每个线程的CPU使用情况。谢谢监控java中每个线程的CPU使用情况?
回答
虽然这是平台依赖,我相信你要找的是ThreadMXBean:http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/ThreadMXBean.html。例如,您可以使用getThreadUserTime方法来获取所需内容。要检查您的平台是否支持CPU测量,您可以调用isThreadCpuTimeSupported()。
相信JConsole(archived link)并通过插件
它采用ThreadMXBean getThreadCpuTime()函数提供这方面的信息。沿的线
东西:
long upTime = runtimeProxy.getUptime();
List<Long> threadCpuTime = new ArrayList<Long>();
for (int i = 0; i < threadIds.size(); i++) {
long threadId = threadIds.get(i);
if (threadId != -1) {
threadCpuTime.add(threadProxy.getThreadCpuTime(threadId));
} else {
threadCpuTime.add(0L);
}
}
int nCPUs = osProxy.getAvailableProcessors();
List<Float> cpuUsageList = new ArrayList<Float>();
if (prevUpTime > 0L && upTime > prevUpTime) {
// elapsedTime is in ms
long elapsedTime = upTime - prevUpTime;
for (int i = 0; i < threadIds.size(); i++) {
// elapsedCpu is in ns
long elapsedCpu = threadCpuTime.get(i) - prevThreadCpuTime.get(i);
// cpuUsage could go higher than 100% because elapsedTime
// and elapsedCpu are not fetched simultaneously. Limit to
// 99% to avoid Chart showing a scale from 0% to 200%.
float cpuUsage = Math.min(99F, elapsedCpu/(elapsedTime * 1000000F * nCPUs));
cpuUsageList.add(cpuUsage);
}
}
通过使用java.lang.management.ThreadMXBean。如何获得ThreadMXBean的:
ThreadMXBean tmxb = ManagementFactory.getThreadMXBean();
然后你就可以查询多少特定线程是通过使用消耗:
long cpuTime = tmxb.getThreadCpuTime(aThreadID);
希望它能帮助。
的确,对象ThreadMXBean提供了您需要的功能(但它可能不会在所有虚拟机上实现)。
在JDK 1.5中,有一个演示程序正在执行您所需的操作。这是在文件夹演示/管理,它被称为JTop.java
不幸的是,它不是在Java6中。也许你可以在谷歌上找到或下载JDK5。
试试“TopThreads”JConsole插件。见http://lsd.luminis.nl/top-threads-plugin-for-jconsole/
链接已经烂掉,https://arnhem.luminis.eu/new_version_topthreads_jconsole_plugin/ – Joost 2017-07-13 09:18:57
Option_1:代码级
在你的业务逻辑代码;在开始时调用start()API和在finally块中调用stop()。这样你可以通过当前正在运行的线程获得执行逻辑的CPU时间。然后记录它。 Reference。
class CPUTimer
{
private long _startTime = 0l;
public void start()
{
_startTime = getCpuTimeInMillis();
}
public long stop()
{
long result = (getCpuTimeInMillis() - _startTime);
_startTime = 0l;
return result;
}
public boolean isRunning()
{
return _startTime != 0l;
}
/** thread CPU time in milliseconds. */
private long getCpuTimeInMillis()
{
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
return bean.isCurrentThreadCpuTimeSupported() ? bean.getCurrentThreadCpuTime()/1000000: 0L;
}
}
Option_2:使用插件监控级(不具有jvisualvm支持IBM AIX箱)
如果你认为这是在现在添加代码延迟,那么你可以喜欢用的JConsole插件支持。我跟着this文章。那篇文章下载topthreads罐子和运行./jconsole -pluginpath topthreads-1.1.jar
Option_3:使用TOP(移动H)+监控级JSTACK(Unix机器具有 '希夫+ H' 的支持)
关注this教程, top命令将提供选项以查找最高CPU线程(nid)。在jstack输出文件中检查那个nid。
- 1. 如何监控linux多处理器环境中java应用程序的每个线程的CPU使用情况?
- 2. 监控每个线程的内存使用情况
- 3. 监控进程的CPU和内存使用情况
- 4. 监控无线网络使用情况
- 5. 在linux中的java服务器CPU使用情况监视器
- 6. 如何监控Android上CPU的使用情况?
- 7. 如何监控Java Heroku应用程序的dyno使用情况?
- 8. 如何监控我的进程在Linux中的每个线程的内存使用情况?
- 9. 在Linux中查找线程的CPU使用情况
- 10. 使用WMI获取C#中每个进程的CPU和RAM使用情况?
- 11. 使用Java检索窗口进程的CPU使用情况
- 12. VB.NET:监控磁盘使用情况
- 13. JS监控数据使用情况?
- 14. 监控内存使用情况
- 15. Android监控网络使用情况
- 16. 记录Java应用程序的CPU使用情况
- 17. 在VBScript中可以确定每个进程的CPU使用情况吗?
- 18. Java单线程CPU使用和多线程CPU使用
- 19. 监控Weblogic服务器上的Java堆使用情况
- 20. 监视终端服务器上的CPU内核使用情况
- 21. 如何监视PHP脚本的CPU使用情况
- 22. 为Java监控系统资源使用情况
- 23. Java中线程或进程的内存使用情况
- 24. 监控进程的网络使用情况?
- 25. 使用java监视线程
- 26. Javascript-动态监视CPU /内存使用情况
- 27. 可靠地监视当前CPU使用情况
- 28. 在Mac上的Java中的CPU使用情况
- 29. 如何在Java中使用Newrelic查找线程使用情况?
- 30. Java api获取我的java应用程序的CPU和内存使用情况
请注意,您可能还需要检查您正在运行的JVM中是否启用了CpuTime。 'threadBean_.isThreadCpuTimeEnabled()'将返回布尔值,如果不是'threadBean_.setThreadCpuTimeEnabled(true)',你可以随时设置它。' – Graham 2012-07-06 07:37:22