【发布时间】:2011-04-01 19:12:46
【问题描述】:
我正在尝试分析在 Windows 上运行的 Java UI 应用程序的 CPU 使用率。我将它连接到 VisualVM,但看起来 CPU 使用率的最高百分比正在被
sum.rmi.transport.tcp.TCPTransport$ConnectionHandler.run();
我相信这是用来向 VisualVM 提供信息的,因此 VisualVM 会扭曲我正在尝试调查的结果。有没有人有办法更好地指示正在发生的事情,或者有更好的方法来确定正在运行的 java 应用程序中什么占用了这么多 CPU。
【问题讨论】:
-
Here's a way 了解程序在做什么。基本上,将软件视为时钟。第二种方法被分钟方法、小时方法、日方法调用。如果您只是对其进行快照,您可以通过检查所有级别来了解它在做什么。连续做几次,你就会知道它花时间在什么地方。
-
通过快照我假设你的意思是堆栈跟踪。你怎么知道哪些线程正在运行?与哪些线程阻塞相比?与哪些线程正在等待调度?
-
把它们都抓起来,研究每一个。你可以很容易地分辨出每个人在做什么。大多数你可以很容易地忽略。你可以通过它在做什么来判断你关心哪个,无论它是在嘎吱作响,还是在等待一些 IO,或者在睡觉,等等。不需要有根据的猜测。
标签: java profiling visualvm jvisualvm