1、问题发现
(1)服务启动半小时后,FullGC次数狂飙,然后服务不能访问,日志抛出heap
(2)查看cpu及内存资源
(2)dump出快照文件分析
2、分析
(1)rabbitmq服务挂了
(2)rabbitmq消费逻辑有问题
3、验证
(1)查看rabbitmq服务,可以登录,可以查看,没发现问题
(2)重启服务后,将rabbitmq停掉,再次查看的时候发现老年代没有发生堆积回收不掉的情况
(3)重启rabbitmq后,一切正常。
通过查看线程资源,用jstack 看了下,全部都是java.lang.Thread.State: BLOCKED (on object monitor),推测大概率是rabbitmq硬盘或内存报警导致的block。跟运维沟通后,原来是之前已经发现过mq内存不足, 运维没及时处理。根据该情况,推测客户端发送数据不断新建线程去链接 ,mq服务无法持续处理,导致一直占用链接,导致线程阻塞占用资源无法回收,从而导致服务内存溢出。
4、其他
jmap -dump:format=b,file=24.hprof 24
kubectl cp qzcsbj/order-b477c8947-tr8rz:/tmp/jstack.txt /root/test/jstack.txt
tar cf - data.txt | kubectl exec -i -n qzcsbj order-b477c8947-tr8rz -- tar xf - -C /root/
以上,-n qzcsbj,表示指定namespace
kubectl -n dev-srm cp console-5749665dcb-txnq5:/deploy/logs/24.hprof /deploy/24.hprof
mat试用
https://www.cnblogs.com/rb2010/p/14741674.html