【发布时间】:2012-06-07 09:56:14
【问题描述】:
所以我正在使用 VisualVM 分析我的应用程序。
我发现了一个关于我的 MySQL 交互的热点。我的第一个想法是热点显示我的应用程序在 IO 之后等待的时间。但在分析报告中,VisualVM 有两列“时间”和“时间(cpu)”。也许这个词被错误地使用了,但我假设 self-time (cpu) 列不包括 IO 时间。经过更多调试,我们得出的结论是假设是错误的,并且显示了 IO 时间,因为热点在 MySQL 驱动程序的 java.net.SocketInputStream.read() 和其他不应该消耗任何 cpu 的 IO 上。
那么,我的问题是为什么 visualvm 将 SocketInputStream.read() 报告为 cpu 时间?
【问题讨论】:
-
可能有一些忙等待,例如在循环中调用
available()? -
对不起我的错误。它在 java.net.SocketInputStream.read()