生产问题排查

问题:多台服务其中有一台不能正常访问

首先查看系统资源占用信息,通过top命令看一下

发现正在运行的JAVA项目CPU占用率很高,百分之400左右了,那么问题一定出在这个程序中,第一感觉是代码有问题了,是不是某种条件下有死循环了,或者突然有什么地方出现了大量运算

然后由上面TOP可知进程ID为21501

再通过ps命令(Ps -mp pid -o THREAD,tid,time)查看这个程序的线程信息,tid代码线程ID,time代表这个线程的已运行时间

于是可以看到这个进程中有4个线程的CPU占用率很高,并且它们目前也运行了46分钟了,它们的TID分别为21515、21516、21517、21518

将这4个TID转为16进制,为等会在jstack中查找方便

得到这4个数的16进制为别为504b、504c、504d、504e

jstack查看进程信息
有了线程ID的16进制后,再在jstack中查看进程堆栈信息(之所有拿到TID信息,主要是为了查找方便)

       从上面jstack中看,并没有我预期的jstack中的Class 正在运行,可能不是死循环,那么不妨将整个jstack保存,以防丢失现场数据。

       现在的问题是gc高了,怎么办,还没有达到触发gc配置文件写dump的条件,那么值能jmap上了,一般情况下是直接先打印一个heap的使用情况,发现内存的新生代和老生代都满了特别是老生代99.98609224955241% used


以为是启动参数配置的问题,结果去查了发现并不是

#perm区大小 -XX:PermSize=256M

#最大perm区大小 -XX:MaxPermSize=512m

-Xms1024M -Xmx2048M

#最大可新生代分配大小 -XX:MaxNewSize=512m

最后通过jmap -histo:live 21501 |head -50查看内存使用情况,发现原来是导出问题所在

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值