如何使Tomcat内存溢出自动生成Heap Dump?

Tomcat

1 前言

一个问题,一篇文章,一出故事。
笔者今天遇到Tomcat服务提示“java.lang.OutOfMemoryError”错误,公司开发希望结合Heap Dump排除故障,因此整理当前章节。

2 最佳实践

2.1 设置Tomcat环境

如何基于RHEL 9.x部署TomCat之二?

2.2 配置内存溢出

2.2.1 定义环境变量

vim /usr/lib/systemd/system/tomcat.service

加入如下配置,

[Service]
#...
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat/heapdump.hprof"
#...

配置修改后,你需要重载服务使配置生效,

systemctl daemon-reload

2.2.2 重启服务使配置生效

systemctl restart tomcat.service

然后,建议你检查你的服务是否正常启动,

systemctl status tomcat.service

2.2.3 确认配置生效

pgrep -u tomcat java -a | grep 'HeapDumpPath'

可见如下配置,

3420503 /usr/java/jdk-15.0.2/bin/java -Djava.util.logging.config.file=/usr/tomcat/apache-tomcat-8.5.81/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat/heapdump.hprof -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Xms4096M -Xmx8192M -Xss512k -server -XX:+UseParallelGC -Dignore.endorsed.dirs= -classpath /usr/tomcat/apache-tomcat-8.5.81/bin/bootstrap.jar:/usr/tomcat/apache-tomcat-8.5.81/bin/tomcat-juli.jar -Dcatalina.base=/usr/tomcat/apache-tomcat-8.5.81 -Dcatalina.home=/usr/tomcat/apache-tomcat-8.5.81 -Djava.io.tmpdir=/usr/tomcat/apache-tomcat-8.5.81/temp org.apache.catalina.startup.Bootstrap start

参阅文档
======================
https://comate.baidu.com/zh/page/q3ejea2iu69

没有评论

发表回复

Tomcat
如何配置Tomcat的日志轮转?

1 前言 一个问题,一篇文章,一出故事。 笔者之前为Tomcat日志自动分割写过一个脚本,最近发现如 …

Tomcat
如何用JSSE配置Tomcat 9 HTTPS?

1 前言 一个问题,一篇文章,一出故事。 笔者需要在Tomcat生产环境启用Tomcat的HTTPS …

Tomcat
如何用OpenSSL SSL/TLS配置Tomcat 9 HTTPS?

1 前言 一个问题,一篇文章,一出故事。 笔者需要在Tomcat生产环境启用Tomcat的HTTPS …