Mysql jconnector在com.myql.jdbc.utils.ReadAheadInputStream.fill()中花费50%的时间

zx_*_*ing 11 java mysql hibernate jdbc

我正在分析我的应用程序,它使用Spring,Hibernate和mysql-java-connector.VisualVM显示,com.myql.jdbc.utils.ReadAheadInputStream.fill()当有1000个并行连接正在读取时,超过50%的CPU时间花在方法上.

是否有任何优化使其更快?

Den*_*nov 0

如果没有额外的信息,很难回答你的问题。这里有一些之前应该满足的信息需求。

  1. 你对CPU时间的估计是绝对的还是相对的?如果fill()方法使用了系统可用 CPU 时间的一半,那似乎很奇怪。但是,如果这个数字是使用 VisualVM 获得的,它报告相对于应用程序所花费的时间的使用时间,那么可能只是应用程序的其余部分没有做重要的工作?
  2. 这些分析测量是否使用系统级工具进行了确认?如果您使用的是 Linux,则可以使用pidstat,mpstat和来交叉检查。sar我已经看到 VisualVM 将SocketInputStream.socketRead0()方法中花费的时间标记为 CPU 时间,这没有得到pidstat. 我猜这是 VisualVM 本身或 JVM 行为中的一些测量近似的结果。因此,使用操作系统工具进行交叉检查始终是个好主意。