У меня есть приложение Java 8, развернутое на Tomcat 8.5, которое работало без сбоев до недавнего времени, когда Tomcat внезапно остановился. Изучив логи, я обнаружил ошибку «недостаточно памяти»:
Java вызывает oom-killer: gfp_mask=0x100dca(GFP_HIGHUSER_MOVABLE|__GFP_ZERO), order=0, oom_score_adj=0 До сих пор приложение функционировало правильно, и единственным серьезным изменением было введение Redis для управления сеансами пользователей с использованием библиотеки Redisson. Redis устанавливается на тот же физический сервер, где находится приложение Tomcat. Приложению выделяется большая часть доступной памяти, оставляя на все остальное примерно 2 ГБ.
В первый день сбоя я заметил, что сборщик мусора освобождает память, но jvm все равно вылетел.


На второй день использование кучи Old Gen было таким:

А это была деятельность GC:

Похоже, что крупных сборок мусора не было, несмотря на то, что память приближалась к своему пределу.
Я пытаюсь понять, связана ли эта проблема с разделением ресурсов сервера между Tomcat и Redis, или это потенциальная утечка памяти в приложении. Мы будем очень признательны за любые идеи или предложения о том, как диагностировать и решить эту проблему.
