VisualVMは、JVMが実行可能であると判断した場合は常に、スレッドをCPU時間を使用しているものとしてカウントします。これは、カーネルでI / Oを待機しているスレッドを含め、ロックを待機していないスレッドは、多かれ少なかれ実行可能と見なされることを意味します。これは、com.myql.jdbc.utils.ReadAheadInputStream.fill()
での大量のCPU使用率です。 から来ています。したがって、CPUの問題ではなく、I/Oの問題が発生します。
JVM側で実行できることがいくつかありますが、単純な最適化はそれほど多くありません。
- 接続プールのサイズを微調整します。 1,000の同時クエリはロットです 。 MySQLインスタンスが本当に大規模でない限り、そのレベルの負荷を処理するのに問題が発生し、クエリを切り替えるだけで多くの時間を消費します。プールのサイズを250または50に減らして、そこでベンチマークしてみてください。
- 実行するクエリの数を減らしたり減らしたりします。アプリが小さい場合、すべてのクエリのすべての行が必要であることは自明かもしれませんが、アプリはそれよりも大きい可能性があります。同じデータをクエリするさまざまな場所ですか、それとも2つの異なるクエリを組み合わせて両方を満たすことができますか?