排查生产环境CPU占用率高问题的步骤
- top命令查看CPU占用率过高的进程
- top -Hp 进程id
- 找到占用率过高的线程id
- 用 printf %x 线程id得到十六进制值
- 用 jstack 进程id >日志文件名.dump得到日志文件
- 在日志文件里搜索这个十六进制值查找原因
比如找出的这个ParallelGC线程占用CPU过高,因为垃圾对象太多
jmap可以看为啥垃圾对象这么多
上午出现的某个进程CPU占用率过高的问题,发现进程里面的子线程是因为ParallelGC线程占用CPU过高,建议启动参数加上:-XX:+UseParNewGC和-XX:+UseConcMarkSweepGC这两种垃圾收集器
jmap使用方法
“pid”表示运行着的java应用的pid。
- jmap -h 查看jmap的使用帮助
- jmap -heap pid 打印堆信息, 包括 JVM版本、垃圾收集器、堆配置、堆各个区域使用情况
- jmap -histo pid 打印堆内每个类的实例数,以及各自占用空间
- jmap -histo:live pid 打印堆内活动着的每个类的实例数,以及各自占用空间
- jmap -clstats pid 打印类加载器实例信息
- jmap -finalizerinfo pid 打印等待回收的对象信息
- jmap -dump pid 导出dump文件 例:jmap -dump:format=b,file=/home/user/8080.hprof 25037 想要浏览heap dump,你可以使用JProfiler(Java堆分析工具)读取生成的文件
查看堆内某个类的实例存储情况
- windows下 jmap -histo pid | findstr 类关键字,, jmap -histo 11212 | findstr Goods
- linux下 jmap -histo pid | grep 类关键字,, jmap -histo 11212 | grep Goods
查看项目的pid
- windows下 cmd中输入jvisualvm,打开jvisualvm即可看见项目pid
- linux下 ps -aux | grep 项目关键字,,或者 netstat -tunlp | grep 项目端口号,,
一个是线程dump,一个堆dump
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具