JVM调优之Java进程消耗CPU过高
JVM调优之Java进程消耗CPU过高
查找问题思路
1.查看cpu使用率,发现有线程cpu占用率很高
tops
咱们拿18092线程举例示范
2.查询pid对应的进程
ps -ef|grep 18092|grep -v grep
3.查找对应进程中的线程使用cpu的情况
top -Hp 18092
发现18097线程占用CPU时间最长
4.根据线程号查看是哪个线程频繁占用CPU
将线程号转化为十六进制的形式
printf "%x\n" 18097
在堆栈信息中查找线程ID对应的信息
jstack 18092|grep 46b1
发现46b1对应的线程为Parallel GC Threads,这个就是JVM下的GC线程,它在频繁的进行垃圾回收。
5.查看进程对应的JVM内存使用情况
jstat -gc 18092 3000
利用上面的命令输出18092进程对应的GC情况,每隔3S采样一次
黄颜色为堆区中Young区GC次数,可观测到一直为68,没有增长。
而红颜色为Old区对应的Full GC的次数,可观测到一直处于增长状态。
一直在FullGC?Old区内存配置的太小了?
6.查看进程对应的JVM的配置情况
jmap -heap 18092
看下边的图👇
新生代是使用率正常
总使用率只有41%
而黄颜色的老生代!!
观察他的使用率居然达到
100%
看看它的空间只有
0.0625MB=64KB
问题找到了!
老生代设置的空间太小导致
一旦这个区被填满之后就会出发FullGC,频繁的GC会影响其他线程的正常调度,会出现“一卡一卡”的现象,这也是CPU使用率居高不下的原因。
更改进程启动参数,将此区域空间调大后问题得到解决。
出处:http://www.cnblogs.com/lingyejun/
若本文如对您有帮助,不妨点击一下右下角的【推荐】。
如果您喜欢或希望看到更多我的文章,可扫描二维码关注我的微信公众号《翎野君》。
转载文章请务必保留出处和署名,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通