VisualVM cuenta un hilo como si usara tiempo de CPU siempre que la JVM crea que es ejecutable. Esto significa que cualquier subproceso que no espera un bloqueo se considera ejecutable, más o menos, ¡incluidos los subprocesos que esperan E/S en el kernel! Aquí es donde la gran cantidad de uso de CPU en com.myql.jdbc.utils.ReadAheadInputStream.fill()
viene de Entonces, en lugar de un problema de CPU, tiene un problema de E/S.
Hay algunas cosas que puede hacer en el lado de JVM, pero no mucha optimización directa:
- Modifique el tamaño del conjunto de conexiones. 1000 consultas simultáneas es mucho mucho . A menos que su instancia de MySQL sea realmente masiva, tendrá problemas para manejar ese nivel de carga y consumirá mucho tiempo simplemente cambiando entre consultas. Intente reducir el tamaño del grupo, a 250 o incluso 50, y compare allí.
- Haga menos consultas o más pequeñas. Si su aplicación es pequeña, puede ser trivialmente obvio que cada fila de cada consulta es necesaria, pero tal vez su aplicación sea más grande que eso. ¿Los diferentes lugares consultan los mismos datos o se pueden combinar dos consultas diferentes en una que satisfaga a ambas?