报表worker-CPU使用率过高原因排查

Posted 冰冰与铛铛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了报表worker-CPU使用率过高原因排查相关的知识,希望对你有一定的参考价值。

一、排查过程
1:查看机器监控,初步判断可能有耗CPU的线程
 
技术分享
bf04410e-9f05-4958-83e0-a2ead10a4aaa
2:导出jstack,发现有大量的RUNNABLE线程,都在java-NIO,之前看过下面http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6403933这篇文章,感觉是这个BUG,由于对ES不熟悉,网上看了一些ES资料,寻求从网络寻找类似案例,没有找到结果。
技术分享
acee5685-d3d6-4d18-8f91-6e2b4208d77f
3:第二天,查看NETTY代码发现,netty已经解决了NIO-BUG,可以排除NIO-BUG了。
 
技术分享
2a2ab8d7-faab-49ff-a37c-36e3021568fe
4:导出jstat信息,发现JVM老年代占用过高(达到97%),Full-GC频率超高,FULL-GC总共占用了36小时。初步定位是频繁FULL-GC导致CPU负载过高。
 
技术分享
6a7fb44a-b86a-44a3-9355-5888aae1db3f
5:使用jmap –histo导出堆概要信息,发现有个超大的HashMap。
 
 
技术分享
2dcacbd2-fd8d-431c-93c1-038e98f02f1c
6:使用jmap –dump导出堆。
技术分享
74ae2f08-3c07-43f3-99c2-e4cd27946419
技术分享
6523c119-ba92-4fc0-84ab-e4417672b50d
得出hashMap中的KEY是运单号
二、总结
1:使用缓存时要做容量估算,并考虑数据增长率
2:缓存要有过期时间。

以上是关于报表worker-CPU使用率过高原因排查的主要内容,如果未能解决你的问题,请参考以下文章

JVM探秘:线上CPU占用过高故障排查

Mysql数据库CPU占用过高原因排查 show processlist

cpu飙升怎么排查

Linux系统CPU/内存使用率过高的问题排查

系统负载高,如何排查?

线上Java程序占用 CPU 过高,请说一下排查方法?