[Systemd for Java process issue with heap dump

问题描述 投票:1回答:1

我的应用程序是用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堆空间”错误,并且未在指定位置导出堆转储和gc日志时失败。是否有人将jar与systemd一起使用并面临类似问题。

java linux spring systemd
1个回答
0
投票

也许将WorkingDirectory=/home/ec2-user/设置为希望日志/转储出现的目录。因为没有那个,我不确定systemd在哪里尝试创建您指定的gc.log。

或者,您可以尝试指定gc.log的完整路径:-Xloggc:/home/ec2-user/gc.log

© www.soinside.com 2019 - 2024. All rights reserved.