gpt4 book ai didi

java - Mysql 连接器在 com.mysql.jdbc.util.ReadAheadInputStream.fill() 中花费了 50% 的时间

转载 作者:IT王子 更新时间:2023-10-28 23:44:26 32 4
gpt4 key购买 nike

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

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

最佳答案

只要 JVM 认为线程可运行,VisualVM 就会将线程计为使用 CPU 时间。这意味着任何不等待锁的线程或多或少都被认为是可运行的,包括在内核中等待 I/O 的线程!这就是 com.myql.jdbc.utils.ReadAheadInputStream.fill() 中大量 CPU 使用率的来源。所以不是 CPU 问题,而是 I/O 问题。

你可以在 JVM 端做一些事情,但不是很多直接的优化:

  1. 调整连接池大小。 1,000 个并发查询是 很多。除非您的 MySQL 实例真​​正庞大,否则它将难以处理该级别的负载,并且在查询之间切换会占用大量时间。尝试将池大小降低到 250 甚至 50,并在那里进行基准测试。
  2. 执行更少或更小的查询。如果您的应用程序很小,那么很明显每个查询中的每一行都是必要的,但您的应用程序可能比这更大。是查询相同数据的不同地方,还是可以将两个不同的查询合并为一个同时满足两者的查询?

关于java - Mysql 连接器在 com.mysql.jdbc.util.ReadAheadInputStream.fill() 中花费了 50% 的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25356260/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com