2010-04-05 3 views
1

J'ai une application J2SE exécutée dans la machine virtuelle 1.5 java dans RHEL OS. L'une des tâches de l'application consiste à créer 3 threads utilisateur en cours d'exécution, au démarrage. Le but est de vérifier une requête d'un type particulier dans la table DB backend et d'effectuer les opérations correspondantes.Les threads Java s'arrêtent soudainement

Comme nous l'avons observé, les longs fils en cours d'exécution arrête brusquement en cours d'exécution, mais l'application est vivante et processus JVM peut être vu, en ps -ef | grep java

Quelqu'un peut-il jeter la lumière sur les raisons de fils qui sont créés courir en boucle infinie, s'arrête brusquement? Toutes les idées sur la façon de détecter ce problème et résolution possible sera d'une grande aide

Avec Cordialement, Krishna

+0

cela ressemble à une description classique d'un deadlock –

Répondre

5

Je suggère d'envoyer un Ctrl+Break à votre application, le dumping et les fils d'analyser la sortie. Peut-être que vos threads attendent une entrée (IO). Peut-être qu'ils sont dans l'impasse. Peut-être qu'ils sont sortis avec une exception non saisie. Le vidage de thread vous dira ce qui se passe (et il est utile de nommer vos threads à l'avance pour pouvoir les identifier dans le vidage).

+0

thread dump est absolument le moyen de résoudre des problèmes comme celui-ci. Vous n'êtes pas sûr de ce que font vos discussions? Dump leur état. Analysez s'ils attendent tous le même verrou/bloqué au même endroit. –

3

Vous avez peut-être des exceptions non gérées. Tout d'abord, vous devez enregistrer toute votre activité de thread (vous pouvez utiliser log4j pour y parvenir).

Vous pouvez également remplacer la méthode uncaughtException de la classe ThreadGroup et créer des alertes lorsqu'un thread meurt en raison d'une exception qui n'a pas été interceptée.