Вопрос по java, sleep – Thread.sleep () никогда не возвращается
У меня странная ошибка сThread.sleep()
на Яве. Почему-то, когда я вызываю sleep на некоторых машинах, он никогда не возвращается. Я не могу понять, что может быть причиной такого поведения. Во-первых, я думаю, что ошибка может быть в другом месте моего кода, поэтому я сделал самый простой тест сна:
public class SleepTest {
public static void main (String [] args) {
System.out.println ("Before sleep...");
try {
Thread.sleep (100);
} catch (InterruptedException e) {
}
System.out.println ("After sleep...");
}
}
На большинстве машин это работает, но на нескольких машинах, к которым я удаленно подключаюсь, оно останавливается на неопределенное время между операторами печати. Я ждал до получаса без изменений в поведении. Машины, которые отображают эту ошибку, являются машинами Linux. Вот некоторая информация о машинах:
$ uname -a
Linux zone29ea 2.6.32-220.17.1.el6.x86_64 #1 SMP Tue May 15 17:16:46 CDT 2012 x86_64 x86_64 x86_64 GNU/Linux
$ java -version
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.6) (rhel-1.43.1.10.6.el6_2-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
Что может быть причиной такого поведения?
ОБНОВИТЬ
Пересмотренная версия, которая до сих пор никогда не заканчивается:
public class SleepTest {
public static void main (String [] args) {
new Thread () {
public void run () {
System.out.println ("Before sleep...");
try {
Thread.sleep (100);
} catch (InterruptedException e) {
e.printStackTrace ();
}
System.out.println ("After sleep...");
}
}.start();
}
}
Thread.sleep(100);
работает даже на Linux.
Denys Séguret
На основании сообщения отhttps://lkml.org/lkml/2012/7/1/19, Я сделал:
date -s "`date`"
и это решило проблему для меня
процессора достигает 100%, проверьте наличиеClock: inserting leap second 23:59:60 UTC
в вашемdmesg:
Если вы обнаружите, что ваш сервер затронутLeap Second bug
К сожалению, Java наиболее эффективна.
Чтобы решить эту проблему, без перезапуска любых серверов (например, tomcat) выполните следующие команды.
/etc/init.d/ntp stop
date `date +"%m%d%H%M%C%y.%S"`
Надеюсь это поможет..
Прыжок Вторая ошибка который появляется в прошлые выходные.
Эта ошибка затрагивает ядро Linux (управление потоками), поэтому приложение, использующее потоки (например, JVM, mysql и т. Д.), Может потреблять высокую нагрузку на процессор.