Ситуация - приложение API работает на tomcat. Каждый раз, когда я достигаю конечной точки API, использование памяти в 'top' возрастает. После того, как он пройдет ~ 35-40% (примерно дюжина запросов), уровень загрузки переходит с 1% до 40 +%, и приложение перестает отвечать на запросы (и tomcat / container должен быть перезапущен).
Что я сделано:
1. Получил дампы кучи после 1 запроса, затем 5-10 запросов и сравнил их. Увеличение памяти происходит не в моих классах, а в int [] и java .lang. Я не знаю достаточно о java mgmt памяти, чтобы понять эту ситуацию.
Я отслеживал количество / рост потоков с помощью ps -eLf
. Ничего не сообщать.
Наблюдал за G C, используя jstat -gc
. Вывод выглядит так:
(начало)
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
56832.0 57856.0 0.0 17266.5 157184.0 31716.8 546304.0 35573.4 40104.0 39112.5 4776.0 4474.5 7 1.669 2 0.251 1.921
(конец - до потери контакта)
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
28160.0 27648.0 0.0 0.0 217088.0 4693.9 546304.0 76262.8 404008.0 402586.8 139816.0 139470.6 40 2.595 13 2.859 5.455
снова - я не знаю достаточно о java mgmt памяти, чтобы действительно интерпретировать эти значения. Я вижу, что основная сборка мусора не занимает слишком много времени, но определенно происходит.
Также пытался (как град) использовать -XX:+UseG1GC
. Никакой реальной разницы.
В качестве значений использования go wild Ive наблюдал за CPU% / IOWait (через верх). Процессор остается рациональным и не измеримым IOWait. Также посмотрел на top -H
с wchan.
Предложения по другим местам искать? Видите что-то очевидное, что я упустил из виду?
Запуск с использованием Java 8. Последняя версия Tomcat rev. CentOS 7. (тестовый запуск в Docker).
дополнительные
Выполнены некоторые измерения с использованием jstat -class
, и мне любопытно узнать следующие значения:
(начало )
Loaded Bytes . Unloaded Bytes Time
121699 122371.1 4 3.4 31.34
(конец)
Loaded Bytes Unloaded Bytes Time
194495 191761.7 4 3.4 39.20
Это говорит о том, что мое приложение загрузило дополнительные 70К классов и не выгружено? Это проблема?