记一次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同学你自己改一下吧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)