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使用率居高不下的原因。


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



目录
相关文章
|
8月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
413 1
|
8月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
387 1
|
网络协议 前端开发 调度
schedule:原来还可以这样让进程让出 CPU?
文章主要讲述通过模拟时钟中断和调度事件来优化和测试虚拟机监控器(VMM)的方法,包括流程设计、寄存器状态的保存与恢复、硬件中断处理规范等细节。
357 11
schedule:原来还可以这样让进程让出 CPU?
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
Windows
dllhost.exe进程占用CPU很高怎么解决?
全面解析dllhost.exe进程
2253 16
|
Java 对象存储 开发者
如何找出Java进程占用CPU高的元凶
本文记录了一次Java进程CPU占用率过高的问题和排查思路。
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
253 1
|
存储 缓存 前端开发
JavaEE初阶——初识EE(Java诞生背景,CPU详解)
带你从零入门JAVAEE初阶,Java的发展历程认识什么是cpu,cpu的工作原理,cpu是如何进行计算的,cpu的架构,指令集,cpu的核心,如何提升cpu的算力,cpu的指令,,cup的缓存,cpu的流水线
|
9月前
|
缓存 人工智能 算法
不同业务怎么选服务器?CPU / 内存 / 带宽配置表
本文详解了服务器三大核心配置——CPU、内存、带宽,帮助读者快速理解服务器性能原理。结合不同业务场景,如个人博客、电商、数据库、直播等,提供配置选择建议,并强调合理搭配的重要性,避免资源浪费或瓶颈限制。内容实用,适合初学者和业务选型参考。
1327 0
|
9月前
|
存储 消息中间件 缓存
从纳秒到毫秒的“时空之旅”:CPU是如何看待内存与硬盘的?
在数据爆炸的时代,如何高效存储与管理海量数据成为系统设计的核心挑战。本文从计算机存储体系结构出发,解析B+树、LSM树与Kafka日志结构在不同数据库中的应用与优化策略,帮助你深入理解高性能存储背后的原理。
294 0