记录开发过程中CPU过高的调优经历

开发时,功能测试自测后,我把维护的代码移交给测试。测试反馈,同步数据时CPU过高。

1. top命令查看CPU使用情况:

2. ps -ef | grep java 查看该进程是哪个微服务的进程号。

3. jmap -heap 进程号 查看,发现新生代和老年代的使用率达到100%。

 这时候明细是发现gc引发的cpu高,立马想到fullgc是不是太频繁了。

 4. jstat -gc 进程号 5000

发现FGC增长的很快。

5. 因为懒得dump当时的内存情况,直接用JDK自带的“jvisualvm.exe”工具去分析:

 发现数据在同步传输的过程中,内存逐步增加,大部分没有释放。

PS:当然也可以

jmap -dump:format=b,file=heapdump pid:将内存使用的详细情况输出到文件

     然后使用jhat命令查看该文件:jhat -port 4000 文件名 ,在浏览器中访问http:localhost:4000/

总结:

该命令适用的场景是程序内存不足或者GC频繁,这时候很可能是内存泄漏。通过用以上命令查看堆使用情况、大量对象被持续引用等情况。

6.分析内存不断被占用的原因,全局变量的内存没有被释放,方法中的变量不会存在该情况。

通过快照的方式找到此处代码:

 发现该代码中相关全局变量有被释放,但是下面有一段代码没有被别的地方使用到。经了解,这是一段无用的老代码。删除多处此代码,重新部署测试。

 jvisualvm工具显示结果良好: 

用top命令查看此时的CPU:

问题解决。

此处记录下调优时看过的相关优秀的文章:

JVM(Java虚拟机)优化大全和案例实战_AlexanderHu的博客-CSDN博客
Java问题诊断和排查工具(查看JVM参数、内存使用情况及分析等) icon-default.png?t=M276https://www.cnblogs.com/z-sm/p/6745375.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值