VisualVM zlicza wątek jako używający czasu procesora, ilekroć JVM uważa, że można go uruchomić. Oznacza to, że każdy wątek, który nie czeka na blokadę, jest mniej lub bardziej możliwy do uruchomienia, włączając w to wątki oczekujące na I/O w jądrze! W tym miejscu występuje duże zużycie procesora w com.myql.jdbc.utils.ReadAheadInputStream.fill()
pochodzi. Więc zamiast problemu z procesorem masz problem z wejściami/wyjściami.
Jest kilka rzeczy, które możesz zrobić po stronie JVM, ale nie za dużo prostej optymalizacji:
- Dostosuj rozmiar puli połączeń. 1000 jednoczesnych zapytań to dużo . O ile twoja instancja MySQL nie jest naprawdę ogromna, będzie miała problemy z obsługą tego poziomu obciążenia i pochłonie dużo czasu na samo przełączanie się między zapytaniami. Spróbuj zmniejszyć rozmiar puli do 250 lub nawet 50 i porównaj tam.
- Wykonuj mniej lub mniejsze zapytania. Jeśli Twoja aplikacja jest mała, może być banalnie oczywiste, że każdy wiersz z każdego zapytania jest niezbędny, ale może Twoja aplikacja jest większa. Czy różne miejsca wysyłają zapytania do tych samych danych, czy też można połączyć dwa różne zapytania w jedno, które zaspokoi oba?