В чем проблема?
После обновления экземпляров до Ubuntu 16.04 LTS и OpenJDK 8 частота сборки мусора может после нескольких часов нормальной работы внезапно увеличиться на порядки, что приведет к использованию менее 10% HEAP.
Мы проанализировали логи GC и ничего странного, кроме увеличения частоты, не обнаружили. Даже gceasy.io говорит, что все классно.
Похоже, что это не влияет на производительность отрицательно, но по-прежнему вызывает беспокойство, а Nagios / OP5 недоволен. Скорость выделения составляет всего 50 МБ / с, а пропускная способность и задержка являются номинальными.
Мы попытались выбросить весь кластер, установить все с нуля, несколько вариантов различных настроек GC и памяти, но проблема все еще возникает.
Раньше работало?
Да. В других экземплярах, использующих те же версии приложений в Ubuntu 14.04 LTS, OpenJDK 7u151 работает, как ожидалось, с нормальной частотой и использованием HEAP.
Вопросы
Экземпляры
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 раза