宕机排查以及打dump方法

3495
1

yangm 数据达人Lv4

发表于2021-12-8 17:44

楼主
本帖最后由 yangm 于 2021-12-8 18:55 编辑

一、背景
在使用过程中,可能出现系统由于内存不足导致宕机。可能出现的情况有如下两点:
1.系统响应慢,所有操作十分卡顿。
2.应用服务器自动关闭,服务器停止响应。
二、排查
1.检查系统内存是否未配置。以tomcat为例,默认分配系统为1G,在大用户量情况下容易出现内存不够的情况,所以没有配置请按照实际情况配置。(单应用服务器-Xmx推荐硬件机器内存的75%)
修改内存大小一般在启动文件startup.bat或startup.sh中设置,设置内存不能低于如下数值:
Set JAVA_OPTS= -Xmx2048m-Xms256m -XX:MaxPermSize=512m(Windows)
JAVA_OPTS=”-Xmx2048m -Xms256m -XX:MaxPermSize=512m”(Linux)
内存调整需根据服务器内存大小、操作系统版本、WEB服务器版本、JDK版本和实际使用情况进行调整,在64bit环境下分配8G内存。
注意:某些JDK版本或操作系统限制最大堆内存,不支持分配超过1.5G的内存,如果有充足的内存,可以多建立几个节点集群成员,逐一对每个成员做相应的修改。
2.如上述已经调整到合理范围,但依然存在报错内存溢出情况,我们需要保存系统实时情况
(1)系统日志并记录宕机发生时间点
(2)发生时间点线程堆栈信息
线程信息可以直接在系统内部下载并导出,如图:



(3)系统dump
如系统直接宕机可采用自动打dump方式:
一般在启动文件startup.bat或startup.sh中设置
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\esenProgram\dump
其中D:\esenProgram\dump为系统真实路径可自行修改
系统会自动记录OOM时候的内存堆栈,并生成dump文件供开发排查分析。


如系统处于响应慢,所有操作十分卡顿状态,并未直接宕机,可采用手动打dump方式。
步骤一:通过JPS命令查看中间件进程PID,或者ps –ef|grep tomcat命令
步骤二:通过jstack命令输出堆栈日志到指定位置,路径随意
jstack $pid > D:\esenProgram\jstack.txt
例如:jstack 8719 >D:\esenProgram\jstack.txt
步骤三:通过jmap命令输出内存详细占用日志到指定位置,路径随意
jmap -dump:format=b,file=D:\esenProgram\dump.hprof $pid
例如:jmap -dump:format=b,file="D:\esenProgram\dump.hprof " 8632

以上资料保存后联系亿信技术人员发送以上资源,提供亿信工程师排查。

最近看过此主题的会员

liulei6511

v笑向前走

esen_3JBLEXE027EL

wxw

yangqh

DJY

GABRIELLE

afxy2239439766

1个回答

只看楼主

yangqh 数据老手Lv5

发表于2023-10-9 11:22

只看该作者

取消 关注该作者的回复

沙发

本帖最后由 yangqh 于 2023-10-9 11:25 编辑

windows手动打dump:
1、查进程PID:Netstat -ano|findstr "端口"2、输出jstack.txt : jstack -l pid >>D:\workyqh\jstack.txt
3、输出dump :jmap.exe -dump:live,format=b,file=D:\workyqh\heap.hprof pid
(以上输出文件路径可自行定义)

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号