#java #docker
#java #docker
Вопрос:
Я запускаю контейнер docker (версия 18.09.1) и Java-процесс (JDK 1.8.0_212) внутри контейнера docker. Контейнер docker был запущен без ограничений памяти, и я вижу, используя статистику docker, что предел — это весь 31 ГБ оперативной памяти, доступный на родительской виртуальной машине (Debian GNU Linux 10). Java-приложение запускается с 18 ГБ кучи, а объем оперативной памяти остается где-то около отметки 20,5 ГБ, как показано в верхней команде.
Время от времени в течение нескольких дней (5-7) java-процесс внутри контейнера docker завершается без каких-либо ошибок. Журналы просто останавливаются на некоторое время, и нет OutOfMemory или каких-либо других ошибок вообще. Я проверил журналы dmesg / syslog / kernel на наличие каких-либо сообщений об уничтожении ООМ, но их вообще нет, даже для любых других процессов.
Я проверил ограничения cgroup для моего контейнера (/sys / fs / cgroup /memory / docker / containerId), и memory.limit_in_bytes кажется огромным значением (9223372036854771712), что меня еще больше смутило.
Любая помощь в понимании того, что может привести к простой остановке процесса, была бы высоко оценена.
Комментарии:
1. Куда JVM будет записывать свои собственные журналы сбоев и дампы ядра?
2. Я предполагаю, что это будет в самой папке Java.
3. Тогда посмотрите туда — возможно, вам повезет
4. Спасибо за ответы, эта проблема исчезла сама по себе и снова начинает повторяться. Обычно мы получаем OutOfMemoryError в журналах, и процесс JVM все еще запущен, чтобы мы могли получить дамп кучи. Но когда это происходит, мы не получаем никаких ошибок в журналах, и журналы внезапно останавливаются, и в папке java нет сбоя или дампа, и я также не могу найти что-либо в syslogs / dmesg для вызова ООМ-убийцы. Он заходит в тупик без альтернативы, кроме как перезапустить процесс.