У меня есть (в настоящее время последний) jdk 1.6.0.18 сбой при запуске веб-приложения на (в настоящее время последний) tomcat 6.0.24 неожиданно после от 4 до 24 часов 4 часа до 8 дней стресс-теста (30 нитей, попадающих в приложение на 6 млн. просмотров страниц/день). Это относится к RHEL 5.2 (Tikanga).
Отчет о сбое находится в http://pastebin.com/f639a6cf1, а согласованные части аварии:
- забрасывается SIGSEGV
- на libjvm.so
- пространство eden всегда заполнено (100%)
JVM работает со следующими параметрами:
CATALINA_OPTS="-server -Xms512m -Xmx1024m -Djava.awt.headless=true"
Я также проверил память на аппаратные проблемы, используя http://memtest.org/ в течение 48 часов (14 проходов всей памяти) без каких-либо ошибок.
Я включил -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
для проверки любых трендов GC или исчерпания пространства, но там нет ничего подозрительного. GC и полный GC происходят с предсказуемыми интервалами, почти всегда освобождая тот же объем памяти.
Мое приложение напрямую не использует какой-либо собственный код.
Любые идеи о том, куда я должен смотреть дальше?
Изменить - подробнее:
1) В этом JDK нет клиента vm:
[[email protected] ~]$ 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)
[[email protected] ~]$ 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 не содержит никакой полезной информации до или во время сбоя
Дополнительная информация: забыл упомянуть о том, что был apache (2.2.14), выходящий из tomcat с использованием mod_jk 1.2.28. Прямо сейчас я запускаю тест без apache, только если авария JVM связана с собственным кодом mod_jk, который подключается к JVM (разъем tomcat).
После этого (если JVM снова сработает), я попытаюсь удалить некоторые компоненты из моего приложения (кеширование, lucene, кварц), а позже попытается использовать причал. Поскольку авария в настоящее время происходит в любое время от 4 часов до 8 дней, это может занять много времени, чтобы узнать, что происходит.