Мы обновились с Ubuntu 16LTS до Ubuntu 18LTS пару дней назад, и с тех пор Apache Tomcat полностью вылетал дважды (один раз в день с интервалом примерно 25 часов). Процесс Java перестает работать.
В этот момент в файл журнала добавляется одна строка:
free(): corrupted unsorted chunks
(вот и все - без отметки времени)
Похоже, что это не связано с каким-либо конкретным действием, происходящим на сервере в то время, по крайней мере, трудно сказать только о двух экземплярах, но я подозреваю, что это может иметь какое-то отношение к сборке мусора. Это связано с тем, что мониторинг сервера показывает, что использование памяти для процесса java упало с 7,90 ГБ до 0,93 ГБ в течение одной минуты в этот момент (на самом деле процесс java завершается, поэтому возможно, что меньшее количество будет после того, как я вручную перезапустил tomcat). Параметр максимальной памяти сервера -Xmmx установлен на 8 ГБ и постепенно перед сбоем он постепенно увеличивался до чуть ниже этого значения в течение дня.
Кроме того, самые первые строки журнала tomcat
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
В /etc/default/tomcat8
У меня есть линия
JAVA_OPTS="-Djava.awt.headless=true -Xmx8g -XX:+UseConcMarkSweepGC"
Эта опция UseConcMarkSweepGC была добавлена обратно в Ubuntu 16, где использовался tomcat7, и я, кажется, помню, что это было рекомендовано. Фактически файл config. файл все еще говорит
'Use "-XX:+UseConcMarkSweepGC" to enable the CMS garbage collector (improved response time)
Во всяком случае, теперь я удалил его в надежде, что это была проблема. Посмотрим, будет ли авария завтра, но пока это кажется разумным? Может ли кто-нибудь предложить какие-либо шаги для проверки этой гипотезы или дальнейшей отладки или какие-либо другие идеи относительно того, что может происходить?
На случай, если у кого-то еще есть эта проблема, благодаря полезному списку рассылки java-core-libs я обнаружил, что причиной было использование APR / собственных библиотек в Tomcat. Удаление их (apt-get remove libapr1) и удаление ссылок на конфигурацию из server.xml решило проблему.