Я добавил отладку в код и смог воссоздать проблему, чтобы подтвердить, что на самом деле выполнение программы останавливается в 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)

Ответы на вопрос(1)

Ваш ответ на вопрос