首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VisualVM socket.read

VisualVM socket.read
EN

Stack Overflow用户
提问于 2012-06-02 20:53:48
回答 3查看 2.5K关注 0票数 10

所以我正在用VisualVM分析我的应用程序。

我遇到了一个关于我的MySQL交互的热点。我的第一个想法是,热点显示我的应用程序在IO之后等待的时间。但是在性能分析报告中,VisualVM有两列“时间”和“时间(cpu)”。也许这个术语用错了,但我认为self-time (cpu)列不包括IO时间。经过更多的调试,我们得出的结论是,这个假设是错误的,并且显示了IO时间,因为热点位于MySQL驱动程序的java.net.SocketInputStream.read()上,以及其他不应该占用任何cpu的IO内容。

那么,我的问题是,为什么visualvm报告SocketInputStream.read()作为cpu时间?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-08 21:18:59

在监视线程活动时,本机调用始终处于RUNNABLE状态,这可能是因为JVM无法知道本机调用是否处于休眠状态或正在执行某些操作。因此,在RUNNABLE状态中经过的时间将计入CPU时间。

票数 11
EN

Stack Overflow用户

发布于 2012-06-03 04:29:57

This very long thread声称,小写操作可能是导致问题的原因。这本书值得一读,但我不知道你能做些什么。你能做什么呢?您可以确保您使用的不是小型fetch size。这不会给你带来小的写操作,但是小的读操作会导致同样的问题。您可以为客户端或服务器尝试不同的平台。this bug中有一条评论是这样写的:

“我们已经看到在Solaris和Linux之间填充I/O缓冲区的速度有很大的不同(因此调用ReadAheadInputStream.fill()的次数也不同,因为它读取可用的内容,除非需要读取的内容超过可用内容,否则不会阻塞)。”

票数 1
EN

Stack Overflow用户

发布于 2012-06-02 21:44:17

SocketInputStream.read()阻塞,直到有来自另一端的数据可用。因此,这可能是数据库的响应速度较慢。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10862464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档