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

Сервер Tomcat 7 испытывает внезапное (на порядок) увеличение частоты Young GC после обновления Ubuntu и OpenJDK

В чем проблема?

После обновления экземпляров до Ubuntu 16.04 LTS и OpenJDK 8 частота сборки мусора может после нескольких часов нормальной работы внезапно увеличиться на порядки, что приведет к использованию менее 10% HEAP.

Мы проанализировали логи GC и ничего странного, кроме увеличения частоты, не обнаружили. Даже gceasy.io говорит, что все классно.

Похоже, что это не влияет на производительность отрицательно, но по-прежнему вызывает беспокойство, а Nagios / OP5 недоволен. Скорость выделения составляет всего 50 МБ / с, а пропускная способность и задержка являются номинальными.

Мы попытались выбросить весь кластер, установить все с нуля, несколько вариантов различных настроек GC и памяти, но проблема все еще возникает.

Раньше работало?

Да. В других экземплярах, использующих те же версии приложений в Ubuntu 14.04 LTS, OpenJDK 7u151 работает, как ожидалось, с нормальной частотой и использованием HEAP.

Вопросы

  1. Так ли себя ведет OpenJDK 8?
  2. Это проблема Ubuntu или OpenJDK?
  3. Является ли закрепление HEAP с помощью Xms нашим единственным вариантом?
  4. (Что на самом деле здесь происходит?)

Экземпляры

VM: AWS (4GB, 2 cores)
Ubuntu: Ubuntu 16.04.4 LTS
Kernel: 4.4.0-1060-aws
Java:
- OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11)
- OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
Tomcat 7.0.8x running with NIO connector and 150 threads

Командная строка (последняя итерация)

export CATALINA_OPTS="$CATALINA_OPTS -Xmx2048m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:NewRatio=1"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseParallelOldGC"
export CATALINA_OPTS="$CATALINA_OPTS -XX:ThreadStackSize=256k"
export CATALINA_OPTS="$CATALINA_OPTS -server"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Xloggc:/var/log/tomcat7/gc.log"

После 48 часов проверки производительности

$ free
              total        used        free      shared  buff/cache   available
Mem:        3801048     1248348     1959488        5280      593212     2291640
Swap:             0           0           0

Это снимок последних 24 часов тестирования производительности: - в 05:30 внезапное падение использования HEAP и увеличение GC - 10:00 увеличение нагрузки в 2 раза

графики тестирования производительности