systemd для проблемы с процессом java с дампом кучи - PullRequest
2 голосов
/ 17 июня 2020

Мое приложение написано в системе java spring boot, для запуска приложения в системе linux я написал файл systemd, как показано ниже.

[Unit]
Description=Service Module For microservice Service.
After=network.target auditd.service
[Install]
WantedBy=multi-user.target
[Service]
Type=idle
Environment=service_name=/home/ec2-user/test-1.0-SNAPSHOT.jar
Environment=env=dev
ExecStart=/usr/bin/java -jar ${service_name} \
     --spring.profiles.active=${env} \
         --Xmx=1300M \
         -XX:+HeapDumpOnOutOfMemoryError \
         -Xloggc:gc.log \
         -XX:+PrintGCDetails \
         -XX:+PrintGCTimeStamps \
         -XX:+UseGCLogFileRotation \
         -XX:NumberOfGCLogFiles=5 \
         -XX:GCLogFileSize=10M

ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=30000
Restart=always
RestartSec=500
StartLimitBurst=3
StartLimitInterval=120
MemoryLimit=1300M
[Manager]

Когда этот файл systemd запущен, я вижу, что упомянутый процесс работает должным образом.

/usr/bin/java -jar /home/ec2-user/test-1.0-SNAPSHOT.jar --spring.profiles.active=dev --Xmx=1300M -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M

Проблема возникает, когда приложение не работает с "java .lang .OutOfMemoryError: Java heap space "ошибки в журналах и не экспортирует дамп кучи и g c журналы в указанном месте. Кто-нибудь использовал jar с systemd и сталкивался с подобными проблемами.

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Что ж, я обнаружил, что проблема была в новой строке и символах \, если мы поместим все аргументы jvm в одну строку, это будет работать !!!.

ex: ExecStart = / usr / bin / java -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = / location / heapdump.bin -Xlogg c: / location / g c .log -jar test.jar --Xms = 512M --Xmx = 1300M --spring.profiles.active = $ {env}

Примечание. Некоторые аргументы устарели в Java 11, поэтому проверьте аргументы документа для включения в соответствии с вариантом использования. https://docs.oracle.com/en/java/javase/11/tools/java.html#GUID -3B1CE181-CD30-4178-9602-230B800D4FAE

0 голосов
/ 17 июня 2020

Возможно, если вы установите WorkingDirectory=/home/ec2-user/ в каталог, в котором вы хотите, чтобы ваши журналы / дампы отображались. Потому что без этого я не уверен, где systemd пытается создать указанный вами g c .log.

Или, в качестве альтернативы, вы можете попытаться указать весь путь к g c .log: -Xloggc:/home/ec2-user/gc.log

...