Il s'agit généralement d'un problème de 'processeur élevé'.
Il existe deux types de hauts problèmes CPU
a) Lorsque le fil est en utilisant 100% CPU d'un noyau (Ceci est votre scénario)
b) l'utilisation du processeur est « anormalement élevée » lorsque nous exécuter certaines actions. Dans de tels cas, le CPU peut ne pas être 100% mais sera anormalement élevé. Typiquement cela se produit quand nous avons des opérations intensives de CPU dans le code comme l'analyse XML, la sérialisation de sérialisation etc.
Le cas (a) est facile à analyser. Lorsque vous rencontrez 100% des vidages de thread CPU 5-6 dans un intervalle de 30 secondes. Recherchez un thread qui est actif (dans l'état "runnable") et qui est dans la même méthode (vous pouvez en déduire en surveillant la pile de threads). Très probablement que vous verrez une « attente active » (voir le code ci-dessous pour un exemple)
while(true){
if(status) break;
// Thread.sleep(60000); // such a statement would have avoided busy wait
}
Case (b) peuvent également être analysées à l'aide des décharges de fil prises dans l'intervalle égal. Si vous êtes chanceux, vous serez en mesure de trouver le code de problème, Si vous n'êtes pas en mesure d'identifier le code de problème en utilisant le vidage de thread. Vous devez recourir à des profileurs. Dans mon expérience, le profileur YourKit est très bon.
J'essaie toujours avec les vidages de threads en premier. Les profileurs ne seront que de dernier recours. Dans 80% des cas, nous serons en mesure d'identifier en utilisant des décharges de threads.
merci les gars! J'utilise eclipse btw – jjnguy