Thread.sleep () завис?

Вот мой простой код для цикла каждую секунду (не обязательно быть точным ) и при необходимости начните работу:

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

Этот код отлично работает в течение нескольких месяцев. Буквально вчера у нас начались проблемы, связанные с зависанием одного из наших серверов в методе Thread.sleep (1000) . IOW - прошло больше суток, а Thread.sleep не вернулся. Я запустил jconsole и получил информацию о потоке.

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)

Scheduler.java:400 - это строка Thread.sleep выше. Вывод jconsole не увеличивает "Всего ожиданий" каждую секунду, как я ожидал. На самом деле ничего не меняется. Я даже закрыл jconsole и снова запустил его в надежде, что это может вызвать обновление, но снова получил только те же числа. Я не знаю, какое еще может быть объяснение, кроме того, что jvm неправильно повесил команду сна. Однако в мои годы у меня было так мало проблем с jvm, что я полагаю, что это должно быть моей недосмотром.

примечание: еще следует отметить, что никакой другой поток не является активным. IOW - ЦП почти бездействует. Я где-то читал, что Thread.sleep мог бы законно голодать, если бы другой поток был активен, но здесь это не так.

версия solaris:

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

версия 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)
20
задан Raedwald 15 June 2013 в 10:53
поделиться