Назад | Перейти на главную страницу

tomcat8: 'free (): поврежденные несортированные фрагменты'

Мы обновились с 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 решило проблему.