У меня произошел (в настоящее время самый последний) сбой jdk 1.6.0.18 при запуске веб-приложения на (в настоящее время новейшем) tomcat 6.0.24 неожиданно после 4–24 часов 4 часов до 8 дней стресс-тестирование (30 потоков, попадающих в приложение со скоростью 6 миллионов просмотров страниц в день). Это на RHEL 5.2 (Тиканга).
Отчет о сбое: http://pastebin.com/f639a6cf1, а согласованные части сбоя:
- SIGSEGV бросается
- на libjvm.so
- eden space всегда заполнен (100%)
JVM работает со следующими параметрами:
CATALINA_OPTS="-server -Xms512m -Xmx1024m -Djava.awt.headless=true"
Я также проверил память на наличие проблем с оборудованием, используя http://memtest.org/ в течение 48 часов (14 проходов всей памяти) без каких-либо ошибок.
Я включил -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
для проверки любых тенденций ГХ или исчерпания пространства, но там нет ничего подозрительного. GC и полный GC происходят с предсказуемыми интервалами, почти всегда освобождая одинаковое количество памяти.
Мое приложение напрямую не использует какой-либо нативный код.
Есть идеи, куда мне смотреть дальше?
Редактировать - больше информации :
1) В этом JDK нет клиента vm:
[foo@localhost ~]$ java -version -server
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
[foo@localhost ~]$ java -version -client
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
2) Смена O / S невозможна.
3) Я не хочу изменять переменные стресс-теста JMeter, так как это может скрыть проблему. Поскольку у меня есть сценарий использования (текущий сценарий стресс-теста), в котором происходит сбой JVM, я бы хотел исправить сбой, а не менять тест.
4) Я сделал статический анализ для моего приложения, но ничего серьезного не получилось.
5) Память не растет со временем. Использование памяти очень быстро уравновешивается (после запуска) с очень устойчивой тенденцией, которая не кажется подозрительной.
6) / var / log / messages не содержит никакой полезной информации до или во время сбоя
Дополнительная информация : Забыл упомянуть, что существует tomcat apache (2.2.14), использующий mod_jk 1.2.28. Прямо сейчас я запускаю тест без Apache на тот случай, если сбой JVM связан с собственным кодом mod_jk, который подключается к JVM (соединитель Tomcat).
После этого (если JVM снова выйдет из строя) я попытаюсь удалить некоторые компоненты из моего приложения (кеширование, lucene, кварц) и позже попробую использовать jetty. Поскольку в настоящее время сбой происходит в любое время от 4 часов до 8 дней, может потребоваться много времени, чтобы выяснить, что происходит.