我在剖析我的应用程序,它使用
Spring Hibernate MysqL-java-connector. visualvm显示,当有1000个并行连接读取时,超过50%的cpu时间是com.myql.jdbc.utils.ReadAheadInputStream.fill()中的成本.
是否有任何优化使其更快?
解决方法
没有其他信息,很难回答您的问题.这里有一些应该满足的信息需求.
>是您估计的cpu时间绝对还是相对的?如果fill()方法使用一半的cpu时间可用于系统似乎很奇怪.但是如果这个数字是使用VisualVM来报告使用时间相对于应用程序花费的时间,那么您的应用程序的其余部分可能没有做重大的工作呢?
>使用系统级工具确定这些分析测量?你可以使用pidstat,mpstat和sar来交叉检查你是否在Linux上.我已经看到VisualVM标记的时间花在SocketInputStream.socketRead0()方法作为cpu时间,这没有被pidstat确认.我想这是VisualVM本身或JVM行为中的一些测量近似的后果.所以通过使用操作系统工具进行交叉检查始终是个好主意.