2011-08-09 4 views
2

J'ai un problème avec ThreadPoolExecutor. Cela fonctionne bien pendant des heures, mais parfois (à un moment aléatoire, parfois après 2 minutes ou 3 heures) il cesse d'exécuter les tâches soumises et le programme se bloque.Java ThreadPoolExecutor cesse de fonctionner après un certain temps

La file d'attente est pleine et tous les corithreads sont actifs à ce moment. Je ne sais tout simplement pas d'où cela vient. Surtout parce que ça marche parfois pendant 3 heures alors que tous les corethreads travaillent tout le temps.

S'il y a quelqu'un qui a une suggestion pour moi, je serais très heureux.

+2

C'est une impasse. Alors quel code est partagé entre les threads? redneck debugging: Essayez d'exécuter votre application en mode débogage et attendez qu'elle se verrouille, connectez-vous avec un débogueur et suspendez jvm, vous pouvez alors voir à quel point tous vos threads sont. –

+0

Si vous suspectez un blocage, videz la trace de la pile de tous les threads. Sur Windows, cela se fait en appuyant sur Control-Break. Regardez pour voir ce que les threads ont synchronisé et ce qu'ils attendent. –

+0

Pas nécessairement un blocage. – erickson

Répondre

0

J'ai rencontré un problème similaire avec un code qui effectue des opérations d'E/S en téléchargeant des pages Web. À un certain point, parfois, en quelques minutes ou quelques heures, un thread se bloque en faisant une opération d'E/S et s'arrête pour fonctionner.

Si c'est le cas, définissez une durée d'avortement.

Exécutez votre code dans un débogueur et lorsque votre application s'arrête, consultez les dernières méthodes exécutées par vos threads.

1

Prendre un look at the stack dump. Cela vous indiquera si les threads sont dans une opération de blocage, en attente d'une condition qui ne se produit jamais, qui fonctionne ou qui est vraiment bloquée.

0

Vous pourriez avoir une fuite de mémoire quelque part et qui provoque le blocage après quelques heures

Questions connexes