Apache Tomcat и SIGABRT
Ситуация вкратце:
Есть веб-сервис на Apache Tomcat + Spring Boot с не самым большим показателем rps и есть примитивный вотчдог, что смотрит на наличие бинда к порту - ss -tupln | grep 8080 | wc -l
, и если что посылает мне уведомление и сам перезапускает сервис. В последнее время я стал получать не одно сообщение за день, что этот веб-сервиc был перезапущен. При этом никаких ошибок OOM ни в логе Tomcat, ни в логе ядра я не нашел. Дампов JVM так же нет. Но просмотрев аудит я обнаружил это - type=ANOM_ABEND msg=audit(1744781861.055:302078): auid=1003 uid=1003 gid=1003 ses=19065 pid=5866 comm="http-nio-8080-e" reason="memory violation" sig=6
. При этом по логу Tomcat видно, что он продолжает выполнять фоновые задачи.
Ситуация с памятью:
$ free -h
total used free shared buff/cache available
Mem: 3.7G 2.1G 543M 17M 1.0G 1.3G
Swap: 3.2G 221M 3.0G
$ grep -i "memory" /proc/30387/limits
Max locked memory 65536 65536 bytes
По итогу сумел договориться с админами на 256 Мб для Max locked memory. Но ошибки не прекратились. Сейчас включил - ulimit -c unlimited
и надеюсь, что создастся дамп ядра.
Подскажите с чего начать решение проблемы, что читать? Кто вообще вызывает SIGABRT?
Флаги JVM:
-Xmx1024m -Xms768m -XX:MaxMetaspaceSize=256M -XX:MetaspaceSize=128M -XX:+TraceClassLoading -XX:+TraceClassUnloading -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${HOST_APP_DIR}/oom_heapdump.bin -XX:+ExitOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
.