记一次JAVA线上CPU飙升的排查过程

今天同事突然问我:API2上面再跑任务吗?CPU使用率暴涨!

我:没有啊!一脸懵逼,然后用top看了一下:

 

同事果然没骗人。咋办呢?只能百度了。大概步骤如下:

1 判断是不是GC引起的: jstat -gc 130109 5000

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
116224.0 116224.0 0.0 78673.9 116736.0 10986.5 699392.0 267423.3 103320.0 98541.6 11928.0 11106.4 53300 794.696 5509 753.220 1547.916
116224.0 116224.0 0.0 64634.2 116736.0 103348.1 699392.0 267788.1 103320.0 98541.6 11928.0 11106.4 53302 794.717 5509 753.220 1547.937

的确不正常,FGC太频繁了。应该是内存泄露了。

2 用命令查看该pid使用cpu最高的线程id

top -bn1 -H -p 130109

好家伙,果然厉害,一人100%

 

3 使用printf "%x\n" 线程ID命令将刚才获取的线程ID转换为16进制 : 130603 -> 1fe2b

4 使用jstack 进程pid | grep 线程pid16进制,定位到该进程下,指定线程的信息。正常情况下,这里会定位到java的类名或方法名。

jstack -l 130109 | grep 1fe2b -A 10

"http-nio-9096-exec-2" #483 daemon prio=5 os_prio=0 tid=0x00007f2a98bb0800 nid=0x1fe2b runnable [0x00007f2a16ff4000]
java.lang.Thread.State: RUNNABLE
at java.util.zip.Deflater.deflateBytes(Native Method)
at java.util.zip.Deflater.deflate(Deflater.java:444)
- locked <0x00000000d007a238> (a java.util.zip.ZStreamRef)
at java.util.zip.Deflater.deflate(Deflater.java:366)
at com.sun.imageio.plugins.png.IDATOutputStream.deflate(PNGImageWriter.java:221)
at com.sun.imageio.plugins.png.IDATOutputStream.write(PNGImageWriter.java:215)
at com.sun.imageio.plugins.png.PNGImageWriter.encodePass(PNGImageWriter.java:908)
at com.sun.imageio.plugins.png.PNGImageWriter.write_IDAT(PNGImageWriter.java:942)
at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1158)
at net.coobird.thumbnailator.tasks.io.OutputStreamImageSink.write(Unknown Source)
at net.coobird.thumbnailator.tasks.SourceSinkThumbnailTask.write(Unknown Source)
at net.coobird.thumbnailator.Thumbnailator.createThumbnail(Unknown Source)
at net.coobird.thumbnailator.Thumbnails$Builder.toOutputStream(Unknown Source)
at com.xxx.xxx.thirdparty.utils.FileCompressUtil.picForScale(FileCompressUtil.java:36)

原来是图片压缩工具导致的内存泄露(工具有坑啊):Deflater使用完后一定得要end

C同学你自己改一下吧

 

 

posted @   M向  阅读(380)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示