Java程序宕机问题-jvm层面排查

1、配置jvm启动参数--宕机前输出堆转储文件和崩溃日志

首先配置jvm启动参数,找到Tomcat目录下的catalina.sh文件,改下面这句话:

#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/dump.bin -XX:+PrintGCDetails -XX:ErrorFile=/data/logs/dump-error.log

 

宕机前输出dump堆转储文件和崩溃日志:

 

 

可以使用jprofiler分析堆转储文件或者https://heaphero.io/heap-index.jsp#header 在线分析堆转储文件。

 

2、运行过程中生成堆转储文件

执行命令,生成堆转储文件:jmap -dump:live,format=b,file=heap-dump.bin

 

3、分析线程CPU消耗情况

top命令查看Java进程号和Java进程CPU使用情况

查看Java进程中所有线程CPU使用情况:top -p java进程号 -H eg:top -p 51334 -H

查看堆栈信息:jstack Java进程号

将消耗CPU最高的线程号转换为16进制:printf "%x\n" 线程号

最后通过16进制的线程号去堆栈信息中去查看此线程的堆栈信息即可。

 

 

 

 

 

posted @   敲键盘的猫  阅读(2336)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示