Fil de discussion.sleep() est bloquée?

Voici mon code simple à boucle à chaque seconde (n'a pas besoin d'être exact) et le coup d'envoi d'un travail si nécessaire:

while (true) {
  //check db for new jobs and 
  //kick off thread if necessary
  try {
    Thread.sleep(1000);
  } catch(Throwable t) {
    LOG.error("", t);
  }
}

Ce code a bien fonctionné pendant plusieurs mois. Juste hier, nous avons commencé à avoir des problèmes où l'un de nos serveurs semble être suspendu dans le Fil.sleep(1000) méthode. OIE - cela fait plus d'un jour et le Fil.le sommeil n'a pas renvoyé. J'ai commencé jconsole et obtenir cette info sur le fil.

Name: Thread-3
State: TIMED_WAITING
Total blocked: 2  Total waited: 2,820

Stack trace: 
 java.lang.Thread.sleep(Native Method)
xc.mst.scheduling.Scheduler.run(Scheduler.java:400)
java.lang.Thread.run(Thread.java:662)

Planificateur.java:400 est le Fil.le sommeil de la ligne ci-dessus. La jconsole de sortie n'a pas incrémenter "Total attendu" chaque seconde que je m'attends. En fait elle ne change pas du tout. J'ai même arrêté jconsole et a commencé à remettre en place dans l'espoir que peut-être ce serait forcer un rafraîchissement, mais seulement obtenu le même nombre de nouveau. Je ne sais pas ce qu'il y a une autre explication pourrait être d'ailleurs que la jvm a mal accroché sur la commande de mise en veille. Au cours de mes années, cependant, j'ai eu si peu de problèmes avec la jvm que je suppose que ça doit être un oubli de ma part.

remarque: L'autre chose à noter est qu'aucun autre thread est actif. OIE - le cpu est presque inactif. J'ai lu quelque part que le Thread.le sommeil pourrait être légitimement de faim si un autre thread a été actif, mais qui n'est pas le cas ici.

la version solaris:

$ uname -a
SunOS xcmst 5.10 Generic_141415-08 i86pc i386 i86pc

version de java:

$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)
  • Vos journaux de montrer quoi que ce soit venant de la LOG.error déclaration?
  • Pourrait-il être un blocage dans le code de base de données?
  • non, rien dans les logs
  • Je ne le pense pas. Même s'il existait, serait-ce une raison de ce Thread.le sommeil ne se réveille pas dans ce fil?
  • J'ai eu si peu de problèmes avec la jvm que je suppose que ça doit être un oubli de ma part. considérez-vous chanceux 🙂
  • Pourquoi êtes-vous attraper Throwable dans ce bloc try? Est-il plus logique à l'intérieur du bloc try que vous n'êtes pas à nous montrer?
  • avez-vous/pouvez-vous envisager de faire tourner dtrace ou strace pour comprendre ce qui conduit à les congeler? Puisque vous avez l'air de l'avoir isolé sur un seul serveur, il peut vous aider à identifier le point de défaillance sur le matériel ou le logiciel de configuration.
  • Est l'exécution de votre application dans un environnement virtuel? Je recommanderais d'essayer sans VM.
  • Je suis confronté problème similaire, mais maintenant, avec SchecduledThreadPoolExecutor sur la JVM 64 bits sur 64 bits, serveur Linux.stackoverflow.com/questions/9044423/...

InformationsquelleAutor andersonbd1 | 2011-07-19