一、排查过程
1:查看机器监控,初步判断可能有耗CPU的线程
![bf04410e-9f05-4958-83e0-a2ead10a4aaa](https://i-blog.csdnimg.cn/blog_migrate/40face01494dcce818eec6d48e4f6da7.png)
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](https://i-blog.csdnimg.cn/blog_migrate/1667505602afd8acebfdc86ee53ae712.png)
acee5685-d3d6-4d18-8f91-6e2b4208d77f
3:第二天,查看NETTY代码发现,netty已经解决了NIO-BUG,可以排除NIO-BUG了。
![2a2ab8d7-faab-49ff-a37c-36e3021568fe](https://i-blog.csdnimg.cn/blog_migrate/60722300e75a609244b12d73250d7d29.png)
2a2ab8d7-faab-49ff-a37c-36e3021568fe
4:导出jstat信息,发现JVM老年代占用过高(达到97%),Full-GC频率超高,FULL-GC总共占用了36小时。初步定位是频繁FULL-GC导致CPU负载过高。
![6a7fb44a-b86a-44a3-9355-5888aae1db3f](https://i-blog.csdnimg.cn/blog_migrate/8cd27022c9c3ae69369966e3c4506afa.png)
6a7fb44a-b86a-44a3-9355-5888aae1db3f
5:使用jmap –histo导出堆概要信息,发现有个超大的HashMap。
![2dcacbd2-fd8d-431c-93c1-038e98f02f1c](https://i-blog.csdnimg.cn/blog_migrate/7783d296a5c687045309e08c4aad6247.png)
2dcacbd2-fd8d-431c-93c1-038e98f02f1c
6:使用jmap –dump导出堆。
![74ae2f08-3c07-43f3-99c2-e4cd27946419](https://i-blog.csdnimg.cn/blog_migrate/321ceba5849fba8bd75c3759cc0ecea1.png)
74ae2f08-3c07-43f3-99c2-e4cd27946419
![6523c119-ba92-4fc0-84ab-e4417672b50d](https://i-blog.csdnimg.cn/blog_migrate/0b7f40534b844d025290477d58231a19.png)
6523c119-ba92-4fc0-84ab-e4417672b50d
得出hashMap中的KEY是运单号
二、总结
1:使用缓存时要做容量估算,并考虑数据增长率
2:缓存要有过期时间。