【发布时间】:2014-10-10 22:48:54
【问题描述】:
我正在分析我的应用程序,它使用 Spring、Hibernate 和 mysql-java-connector。 VisualVM 显示当有 1000 个并行连接进行读取时,超过 50% 的 CPU 时间花费在 com.myql.jdbc.utils.ReadAheadInputStream.fill() 方法上。
有没有什么优化让它更快?
【问题讨论】:
-
您的日志记录设置为调试级别吗?你是在用这些连接做点什么,还是只是在做虚拟选择?此外,此类委托给另一个输入流。查看其中一个调用的堆栈跟踪会很有帮助。
-
@Augusto 我正在做真正的查询,每次返回大约 200 行。你的意思是什么日志记录?在休眠或mysql上?真正的方法是java.net.SocketInputStream.read。我用谷歌搜索,但没有太多关于如何改进它的提示。
-
听起来确实是在等待数据库返回数据。问题可能出在数据库本身,你有没有看到 MySQL 的任何使用数据和它运行的盒子? 1000 个并发连接将使用大量内存。如果它必须访问磁盘以进行这些查询,那么数据库将需要很长时间才能响应。
-
@Augusto 是的,它似乎是。我换了更强大的机器,性能越来越高
-
运气好能解决这个问题吗?