Не делается дамп памяти Java, хотя все указано правильно

117
12 ноября 2021, 04:00

У меня случается утечка памяти и сервер падает с Out of Memory Error.

В логе после падения написано:

#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1048576 bytes for committing reserved memory.
# Possible reasons:
#   The system is out of physical RAM or swap space
#   In 32 bit mode, the process size limit was hit
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Use 64 bit Java on a 64 bit OS
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
#  Out of Memory Error (os_linux.cpp:2743), pid=16671, tid=0x00007f93ec710700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_191-b12) (build 1.8.0_191-b12)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.191-b12 mixed mode linux-amd64 compressed oops)
# Core dump written. Default location: /home/mcraft/servers/survival1/core or core.16671
#

В логе написано, что дамп памяти был сделан:

Core dump written. Default location: /home/mcraft/servers/survival1/core or core.16671

Но это не правда, там дампа нет!
И еще странно, что это не та папка, которую я указал в VM Options:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/survival.hprof

Памяти на диске хватает, там доступно 258G, смотрел через df -H.
Система debian 9, вывод java -version:

java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

Полный start.sh:

ulimit -c unlimited
screen -dmS server bash -c "ulimit -c unlimited; \
    java \
    -Xms2G \
    -Xmx5500M \
    -Dfile.encoding=UTF-8 \
    -XX:+UnlockCommercialFeatures -XX:+FlightRecorder \
    -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=100 -XX:+DisableExplicitGC -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:G1MixedGCLiveThresholdPercent=35 -XX:+AlwaysPreTouch -XX:+ParallelRefProcEnabled -Dusing.aikars.flags=mcflags.emc.gs \
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/survival.hprof \
    -jar core.jar"
  1. Почему не делается дамп?
  2. Почему пишет, что он был сделан не в ту папку, какую я указал?
Answer 1

В общем теперь я понял, сервер упал с нехваткой RAM памяти, в таком случае пишется именно The system is out of physical RAM or swap space. В таких случаях дамп не делается. Дамп делается только в случае, если не хватило именно Heap.

Чтобы все работало, нужно понизить максимальный порог памяти у java приложения таким образом, чтобы выделенный объем Heap поместился в RAM.

READ ALSO
Как поменять настройки Hikari Connection Pool

Как поменять настройки Hikari Connection Pool

Суть проблемы: у меня есть файлproperties, в нем лежат все данные необходимые для настройки конекшн пула, также есть конфиг файл который считывает...

291
Создание объекта без ключевого слова new

Создание объекта без ключевого слова new

Если в Java для выделения памяти под новый объект используют ключевое слово new, то почему в данной ситуации, при создании экземпляра класса...

140
lambda expressions

lambda expressions

недавно изучаю лямбды

176
Как из приложения запустить поиск слова в Гугле?

Как из приложения запустить поиск слова в Гугле?

Хочу из контекстного меню осуществить возможность поиска нужного слова в поисковике браузераЧто-бы нажать кнопку, и открылся браузер с результатами...

159