JVM调优之Java进程消耗CPU过高

简介: JVM调优之Java进程消耗CPU过高

JVM调优之Java进程消耗CPU过高

查找问题思路

1.查看cpu使用率,发现有线程cpu占用率很高

tops


咱们拿18092线程举例示范



6aa2fb0432b8f9c779135e409820981c.png

2.查询pid对应的进程

ps -ef|grep 18092|grep -v grep


b1b1a449c9dcbbddda34df77a675ae1c.png


3.查找对应进程中的线程使用cpu的情况

top -Hp 18092


发现18097线程占用CPU时间最长



a99e5050a2650ecdee17d43756a7cba3.png

4.根据线程号查看是哪个线程频繁占用CPU

将线程号转化为十六进制的形式


printf "%x\n" 18097

cd84fbed4b0b2b5328e2e4ef73538f62.png



在堆栈信息中查找线程ID对应的信息


jstack 18092|grep 46b1


d938c2242b0dc5d9a8933bd7e020bf6f.png


发现46b1对应的线程为Parallel GC Threads,这个就是JVM下的GC线程,它在频繁的进行垃圾回收。


5.查看进程对应的JVM内存使用情况

jstat -gc 18092 3000


利用上面的命令输出18092进程对应的GC情况,每隔3S采样一次


5b082fb98561adbf529eecccdb5847d6.png


黄颜色为堆区中Young区GC次数,可观测到一直为68,没有增长。


而红颜色为Old区对应的Full GC的次数,可观测到一直处于增长状态。


一直在FullGC?Old区内存配置的太小了?


6.查看进程对应的JVM的配置情况

jmap -heap 18092


看下边的图👇

60adb6d8e9911755d3e6113750349987.png



新生代是使用率正常


总使用率只有41%


而黄颜色的老生代!!


观察他的使用率居然达到


100%


看看它的空间只有


0.0625MB=64KB


问题找到了!

老生代设置的空间太小导致


一旦这个区被填满之后就会出发FullGC,频繁的GC会影响其他线程的正常调度,会出现“一卡一卡”的现象,这也是CPU使用率居高不下的原因。


更改进程启动参数,将此区域空间调大后问题得到解决。



目录
相关文章
|
20天前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
99 4
|
4天前
|
存储 缓存 监控
【Java面试题汇总】JVM篇(2023版)
JVM内存模型、双亲委派模型、类加载机制、内存溢出、垃圾回收机制、内存泄漏、垃圾回收流程、垃圾回收器、G1、CMS、JVM调优
【Java面试题汇总】JVM篇(2023版)
|
15天前
|
安全 前端开发 Java
浅析JVM invokedynamic指令与Java Lambda语法的深度融合
在Java的演进历程中,Lambda表达式无疑是Java 8引入的一项革命性特性,它极大地简化了函数式编程在Java中的应用,使得代码更加简洁、易于阅读和维护。而这一切的背后,JVM的invokedynamic指令功不可没。本文将深入探讨invokedynamic指令的工作原理及其与Java Lambda语法的紧密联系,带您领略这一技术背后的奥秘。
12 1
|
19天前
|
消息中间件 算法 Java
深入浅出操作系统:进程管理的艺术掌握Java中的异常处理机制
【8月更文挑战第30天】在数字世界的舞台上,操作系统扮演着导演的角色,精心安排着每一个进程的表演。本文将揭开进程管理的神秘面纱,从进程的诞生到终结,探究它们如何在操作系统的指挥下和谐共舞。通过生动的比喻和直观的代码示例,我们将一同走进操作系统的核心,理解进程调度、同步与通信的内在机制,以及它们对计算生态的重要性。让我们跟随代码的节奏,一起感受操作系统的魅力吧!
|
1月前
|
存储 Java 程序员
Java中对象几种类型的内存分配(JVM对象储存机制)
Java中对象几种类型的内存分配(JVM对象储存机制)
60 5
Java中对象几种类型的内存分配(JVM对象储存机制)
|
1月前
|
Java
Java常见JVM虚拟机指令(47个)
Java常见JVM虚拟机指令(47个)
39 3
Java常见JVM虚拟机指令(47个)
|
24天前
|
Java
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
|
1月前
|
存储 算法 前端开发
JVM架构与主要组件:了解Java程序的运行环境
JVM的架构设计非常精妙,它确保了Java程序的跨平台性和高效执行。通过了解JVM的各个组件,我们可以更好地理解Java程序的运行机制,这对于编写高效且稳定的Java应用程序至关重要。
34 3
|
17天前
|
C# 开发者 Windows
震撼发布:全面解析WPF中的打印功能——从基础设置到高级定制,带你一步步实现直接打印文档的完整流程,让你的WPF应用程序瞬间升级,掌握这一技能,轻松应对各种打印需求,彻底告别打印难题!
【8月更文挑战第31天】打印功能在许多WPF应用中不可或缺,尤其在需要生成纸质文档时。WPF提供了强大的打印支持,通过`PrintDialog`等类简化了打印集成。本文将详细介绍如何在WPF应用中实现直接打印文档的功能,并通过具体示例代码展示其实现过程。
63 0
|
17天前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
34 0