VisualVM отчита дадена нишка като използваща процесорно време, когато JVM смята, че е изпълнима. Това означава, че всяка нишка, която не чака заключване, се счита за изпълнима, повече или по-малко, включително нишки, чакащи за I/O в ядрото! Това е мястото, където голямото използване на процесора в com.myql.jdbc.utils.ReadAheadInputStream.fill()
идва от. Така че вместо проблем с процесора, имате I/O проблем.
Има някои неща, които можете да направите от страна на JVM, но не много просто оптимизиране:
- Настройте размера на пула за връзки. 1000 едновременни заявки са много . Освен ако вашият MySQL екземпляр не е наистина огромен, той ще има проблеми със справянето с това ниво на натоварване и ще изяде много време само при превключване между заявки. Опитайте да намалите размера на пула до 250 или дори 50 и направете сравнение.
- Правете по-малко или по-малки заявки. Ако приложението ви е малко, може да е тривиално очевидно, че всеки ред от всяка заявка е необходим, но може би приложението ви е по-голямо от това. Различните места, които заявяват едни и същи данни ли са или две различни заявки могат да бъдат комбинирани в една, която да удовлетвори и двете?