线上问题排查方法

  • 线上服务器偶尔会因为程序问题导致报警,下面的方法可以有效的进行现场跟踪和问题排查:

具体步骤

1、查找进程号:jps
2、创建堆栈文件: touch jstack.txt
3、文件赋权chmod 777 jstack.txt
jstack PID > jstack.txt 
4、找出占用cpu最高的线程:(top -H -p PID)
5、将线程id转换成16进制 echo “obase=16;ID” | bc
6、在jstack.txt文件中查找对应的线程,寻找蛛丝马迹。
7、如有必要也可查看内存数据对象:
jmap -dump:format=b,file=/home/user/dumfile1,live PID
 

实例现场

一次线上服务器不断的进行full GC ,而且时间GC时间很长都在10s以上,cpu占用都在100%左右,
按照上面的步骤得到对应的线程堆栈文件和占用cpu最高的线程:
对应的线程信息
 

结论

从上述可以看出是系统在不断的进行GC,(java程序cpu占用100%,都是因为内存不够用了,但是GC又回收不了(socket/线程之类资源未释放、全局list或map之类),所以导致GC一直执行回收)
通过堆栈,当时应用业务代码正在大量的list执行fastjson的数据模型抓换,并且是多个线程同时执行,最终导致了这个问题;后来采取降低执行线程数,单线程处理,避免了这个问题的再次发生。
 
 
 
 
 
 

转载于:https://www.cnblogs.com/xiayangy/p/5033669.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值