Java应用CPU占用100%原因分析

Java 应用程序CPU 100%问题排查优化实战 今天再给大家讲一个 CPU 100% 优化排查实战。 收到运维同学的报警,说某些服务器负载非常高,让我们开发定位问题。拿到问题后先去服务器上看了看,发现运行的只有我们的 Java 应用程序。于是先用 ps 命令拿到了应用的 PID。 ps:查看进程的命令;PID:进程 ID。ps -ef | grep java 可以查看所有的 Java 进程。前面也曾讲过。 接着使用 top -Hp pid 将这个进程的线程显示出来。输入大写 P 可以将线程按照 CPU 使用比例排序,于是得到以下结果。 阅读详情

一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。
以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。

使用top命令查看cpu占用资源较高的进程PID

根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。
通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。
在这里插入图片描述
但是,怎么定位到具体线程或者代码呢?

ps查看指定进程中各个线程占用CPU的状态

首先显示线程列表:查看指定进程中各个线程占用CPU的状态,选出耗时最多、最繁忙的线程id

ps -mp pid -o THREAD,tid,time

1
找到了耗时最高的线程28802,占用CPU时间快两个小时了!
其次将需要的线程ID转换为16进制格式:
printf “%x\n” tid
2

最后jstack打印线程的堆栈信息

jstack pid |grep tid -A 303
找到出现问题的代码了!
现在来分析下具体的代码:ShortSocketIO.readBytes(ShortSocketIO.java:106)
至于具体怎么修改就看业务逻辑应该怎么对待这种特殊情况了。

总结

最后,总结下排查CPU故障的方法和技巧有哪些:
1、top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。
2、PS命令:Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。
3、jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。
4、pstack:Linux命令。可以查看某个进程的当前线程栈运行情况。

(友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen)

附:巧转进制

PID的进制转换可以使用程序员计算器,这里也提供另外一个的方法:通过chrome浏览器的JavaScript调试控制台进行转换。

在chrome浏览器中按F12打开开发者工具,切换至Console,定义一个变量a,再通过a的字符串转换函数转换至16进制。

a = 23512;
23512
a.toString(16); // 转换为16进制字符串
"5bd8"
CPU占用高报错100% CPU Usage的线程堆栈与火焰图分析 摘要:CPU占用100%是Java应用常见性能问题,本文分析了死循环、资源竞争、算法低下等常见原因。介绍了利用jstack工具获取线程堆栈和perf工具生成火焰图的诊断方法,通过分析RUNNABLE线程和调用链定位问题。最后提出了修复死循环、优化算法和使用线程池等优化策略,并展示了代码示例和优化效果对比表。这些方法能有效降低CPU占用,提升应用性能。 阅读详情

相关推荐

线上Java应用CPU占用率100%的故障排查与分析

通过使用jstack等工具获取线程栈信息,并分析定位导致CPU占用率高的线程,可以帮助我们快速排查和修复问题。最终,通过优化代码、异步处理和调整线程池配置等手段,可以降低CPU占用率,提高应用的性能和稳定性。获取线程栈信息:使用JDK提供的工具jstack,可以获取Java进程中所有线程的栈信息。通过分析线程栈,我们可以了解每个线程正在执行的代码,从而找到可能导致CPU占用率高的线程。确认CPU占用率:首先,我们需要确认应用程序的CPU占用率是否真的达到了100%,可以通过命令行工具或监控系统获取。

CyberByte的博客 568

java 应用cpu飙升(超过100%)故障排查

1、采用定位进程登录服务器,执行top命令,查看CPU占用情况,找到进程的pid2、使用top -Hp命令定位线程使用 top -Hp命令(为Java进程的id号)查看该Java进程内所有线程的资源占用情况(按shft+p按照cpu占用进行排序,按shift+m按照内存占用进行排序)3、使用命令定位代码。

xw4461157的博客 930

CPU飙到100%怎么办?全方位解决高占用问题的完全指南

嗨,各位!有时候我们在使用电脑的时候,会突然发现电脑变得像蜗牛一样慢,风扇呼呼地吹得跟暴风雨一样,一打开任务管理器,哎呀妈呀——CPU 100%!这简直是电脑的小灾难!尤其是紧急的时候,怎么快速、有效地处理这种高占用情况?今天我们就来聊一聊如何解决 CPU 占用过高的问题,以及如何防止它再次出现!CPU 100% 的问题并不可怕,关键是找到原因并对症下药。通过本文中的方法,相信你能够在 CPU 高占用时迅速做出反应,让电脑“满血复活”!

喵手的博客 1万+

线上应用故障排查之一:高CPU占用

一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。 (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen) 以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。 根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。 通过ps aux |...

经验不在于年限,在于积累---专注互联网软件开发 2116

Linux CPU 占用率 100% 排查五步法

Linux 服务器 CPU 占用率达到 100% 且一直居高不下,严重影响业务系统的正常使用,这时候领导让你来排查问题原因,如果不知道该如何下手,就有点尴尬了。当然,除了使用上面的基础方法外,还有很多工具可以直接使用,例如阿里的 Arthas。

蔡定努 1万+

基于紫光展锐平台的音频调用到hal层逻辑

基于紫光展锐平台的音频调用到hal层逻辑 1、数据流程图 AudioPolicyService和AudioFlinger的创建: 这两个服务都在audioserver中启动,文件路径: frameworks/av/media/audioserver/main_audioserver.cpp 从AudioFlinger和AudioPolicyService的创建,到output的打开,以及AudioFlinger开始往底层写入数据的具体流程如下图: #mermaid-svg-kjHL4XWwkQXN6NdA

weixin_55053963的博客 1355

tomcat部署Java导致cpu使用率过高问题

记录哈cpu使用使用率过高的问题,面试中遇到了好几次问这问题的,在此记录一下,

黄河涛涛h的博客 844

知识图谱与人工智能本体论:构建机器认知的语义基石

本文探讨了知识图谱与人工智能本体论如何作为机器认知的语义基石,让AI从‘知道数据’迈向‘理解知识’。文章详细拆解了本体论的核心构件与构建方法,并阐述了从本体到知识图谱的实践路径,包括知识获取、融合、存储及推理应用,最终分析了其在智能搜索与专家系统等场景中带来的根本性重塑。

nginx7reverse的博客 909

jvm java tomcat_Tomcat的jvm配置

Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个JAVA虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,JAVA程序启动时JVM会分配一个初始内存和最大内存给程序。当程序需要的内存超出内存的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。1.Tomcat异常类型常见的Java内存溢出有以下三种:1.Java.lang.OutOfMemoryError:java heap...

weixin_33817338的博客 610

STM32使用ASR01语音播报模块

自己再根据鹿小班模块进行操作进行相关操作,先接上usb数据线。这里提供一套修改好的天问程序模板和stm32f103模板。这里使用的asr01语音播报模块是模块化编程。这里使用的asr01语音播报模块是模块化编程。记得先生成模型再去编译下载。先下载天问block软件。

lml1781978327的博客 1万+

【PowerHarmony】电鸿蒙学习记录-准备工作

将获取的“PowerHarmony_PHM_SDK_V1.0.1.0.tar.gz”进行解压。将获取的“code_1.91.1-1720564633_amd64.deb”进行解压。打开后可见所有文件夹,即可进行编辑开发,VSCode也可打开终端进行编译等调试。选择主控类型,我是用的是gd32f470,我选gd32f4xx。Open Folder路径选中SDK解压后根目录即可。选择对应系统类型,我的是小型的,我选mini。选好后即完成工程创建。

Allenzhu的博客 2724

Java应用CPU占用100%原因分析(转载)

在linux环境下部署的应用,有时候出于各种原因,出现cpu占用100%的情况。这时候,就需要快速分析定位cpu占用的原因。 通常,通过linux系统的top命令,可以看出具体哪个进程占用了过多的cpu资源。但如果发现是java进程,那么就需要进一步分析是java进程中的具体哪个线程出现了问题。 1、确定Java应用进程编号 使用 jps 或 ps -ef|grep java 命令确定想要分析...

hahavslinb的专栏 4536

通达信股本变迁文件(gbbq)解密方法

近年来A股市场跌宕起伏真特么精彩,本人愚钝,被整爆仓,损失惨重 痛定思痛,认为交易这种对纪律要求极高,且必须完全排除情绪影响的勾当,还是应该交给程序来干 数据哪里来呢?当然是拿来主义。。。问券商的交易软件要呗 到处查资料,得知通达信的权息文件数据齐全,不仅含有除权除息数据,还含有限售解禁、增发、可转债上市等股本变化数据 ——这对于某些对成交量变化敏感的交易模型是非常重要的

不甘碌碌老,结庐铸宝刀 2万+

CPU 100%问题排查总结

如果是Full GC次数过多,那么通过 jstack得到的线程信息会是类似于VM Thread之类的线程,而如果是代码中有比较耗时的计算,那么我们得到的就是一个线程的具体堆栈信息[如下]。如果程序中有大量的线程,并且这些线程没有得到适当的管理和控制,可能会导致线程竞争和频繁的上下文切换,从而导致CPU占用率高。如果程序中有大量的计算任务,尤其是在循环中进行复杂的计算操作,可能会导致CPU占用率高。如果程序中存在不合理的资源使用,例如频繁的IO操作或内存泄漏,可能会导致CPU占用率高。

程序猿进阶 1万+

npm报错 npm WARN deprecated....的问题解决方式

报错 :npm WARN deprecated … 现象:无法进行有效的vue项目的部署以及npm install 命令的执行。 原因一:版本问题 说明:由于npm的版本过低或者过高导致的报错 检查版本: npm -v 如果版本是比较旧的,或者是最新的,这里可以进行对npm的更新和回退。 更新npm版本: npm updated -d 查看可以更新的版本 npm install -g npm 默认安装最新版本 安装回退指定的版本: npm updated -d 查看所有的版本 npm -g i.

任聪聪的博客 16万+

微信小程序 - 最新详细实现用户保存下载视频到手机相册,将视频临时路径、在线播放地址(网络路径)URL存储到手机,弹出访问手机相册权限询问,支持视频格式mp4、avi、mov、wmv、flv、webm

微信小程序,视频,手机相册,保存,另存为,小程序保存到相册权限,writePhotosAlbum,一键保存视频到手机相册功能(视频来源为链接),第一次要获取用户授权,授权使用相册权限,小程序视频下载,如何把视频下载到相册,下载一个视频到本地相册,显示下载进度,可取消下载,视频下载到本地,微信小程序视频如何下载,保存视频到相机,页面播放视频并下载到本地,安卓系统,苹果ios保存到相册报错,权限拒绝后打不开,添加相册授权弹框拒绝后再也出不来了,实现保存视频到手机相册功能,将mp4在线视频下载并存储到用户的手机中

🏆 前端领域优质创作者 7620

Java服务,CPU100%问题如何快速定位?

找到相关服务,如何定位问题代码,也非常考验技术人的功底,今天简单说下思路。假设,服务器上部署了若干Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警。如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?简要步骤如下:(1)找到最耗CPU的进程;(2)找到最耗CPU的线程;(3)查看堆栈,定位线程在干嘛,定位对应代码;步骤一、找到最耗CPU的进...

shenjian58的博客 1万+

如何让 Mac mini 24小时不休眠运行 OpenClaw

如果 OpenClaw 每 5-10 分钟自动退出,launchd 连续 4 次快速重启后会判定为崩溃循环并卸载服务。:方案一(pmset)+ 方案三(launchd)组合使用,既防止系统休眠,又保证 OpenClaw 开机自启和崩溃自动恢复。:caffeinate 只在进程运行期间有效,终端关闭或进程结束后系统恢复正常睡眠策略。这条命令会自动创建 launchd plist 并启用服务,是最推荐的方式。替换为你的实际用户名路径,Node.js 路径也要改成你自己的。确保 plist 中有。

Maynor的博客 2193

CPU 100%排查及常见案例

还在为CPU 100%而头疼吗?几个简单案例带你了解常规CPU 100%排查过程,正在学习的也可以自己动手实践一次

共勉 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java进程 jvm cpu100%问题排查

排查java进程cpu100%的大致过程 之前也排查过cpu 100%的问题,排查java cpu100%的问题,大致步骤是固定的,首先找到占用cpu的进程,如果是java进程,则继续查看是哪个线程占用cpu,然后到处线程栈,找到对应的线程,这时候就定位到具体哪行代码了,基本上问题就解决了。 故事背景 今天监控系统报警后台管理系统又出现cpu 100%,这个问题间歇性出现,后台管理系统使用ssm+...

wangjun5159的专栏 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java项目CPU100%如何处理

计算密集型的任务需要大量的计算能力。命令jstack是java堆栈的跟踪工具,可以打印出程序中所有线程的堆栈信息,包括线程状态,调用栈信息,锁信息等。这会导致所有线程获得的 CPU 时间减少,当每个线程都试图完成自己的任务时,CPU 时间可能会被耗尽。的14行左右,这里给出的是14行,但是实际情况是14行的附近,结合代码来看一下就很容易问题。命令来查看程序的所有堆栈信息,但是,这里需要有一个注意的点,26976这个是一个十进制。的,使用jstack看到的nid是十六进制,所以我们需要转换,可以使用。

qq_39959019的博客 5051

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Java】服务CPU占用率100%,教你用jstack排查定位

本文介绍了使用jstack工具诊断Java应用中CPU高占用问题的方法。关键步骤包括:首先,通过top或jps -l命令定位高CPU占用的Java进程;其次,运用top -Hp 找出消耗CPU最多的线程;接着,将线程ID转换为十六进制,以便于jstack命令使用;最后,通过jstack | grep '' -C5命令获取特定线程的堆栈信息,进而分析和修复问题代码。jstack是Java开发者解决性能问题的有力工具。

JavaDog程序狗 4163

Netty是如何解决epoll CPU占用100%问题的

epoll 100% CPU 问题由 Java NIO 的空轮询引起,通常源于epoll_wait的异常返回。Netty 的解决方案空轮询检测:通过selectCnt计数器检测连续空轮询,超过阈值(默认 512)触发。重建 Selector:创建新Selector,重新注册Channel,解决epoll问题。动态 select 策略:根据任务状态选择selectNow或,减少不必要调用。自适应超时:动态调整select超时时间,降低空轮询影响。异常处理:捕获等,保持循环稳定。在中的作用。

eclipseC的博客 1204
上一篇: Java之SPI机制
下一篇: Java死锁排查
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值