记一次 Java 项目 CPU 占用久高不下故障处理
事件背景
公司对接了新系统,代码变动很大,项目也很急,于是在上线之后 Zabbix 不时就告警,提示 CPU 使用过载,告警消息类似如下:

一开始以为是系统停机升级,所有人都等着使用系统,导致系统处理压力增加的缘故,所以并没有太关注,但后来发现一直都在出这个问题,就觉得不对了。于是开始着手对问题开始处理。
排查问题
1. 由于是 CPU 使用率问题导致,所以可以先定位,到底是哪个服务导致,于是使用 top 命令查看:
top
结果如下:(使用 shift + m 可以对通过内存使用排序,方便我们找到问题进程)

当然,我这里已经是正常状态了,故障的时候没有来得及截图!当时 %CPU 我记得是 398。
可以大致猜想到,肯定是代码中某个函数问题,导致阻塞在那里了。
2. 查看该进程的开启的线程信息使用 ps 命令:
ps -mp 6506 -o THREAD,tid,time
当然, 是这个有问题进程的 PID 注意改成你自己的。tid 是线程 ID,time 则是该线程运行的时间,附带一张故障当时的截图:

可以看到 1816 和 1817 这两个线程 CPU 使用 94% 以上,并且运行了 7 分钟了。
3. 由于 jstack 中线程 ID 是 16 进制的,所以我们需要转成 16 进制来协助我们查询问题:
printf "%x\n"
printf "%x\n"
结果如下:

4. 通过 JDK 自带的 jstack 工具获取运行时候的信息:
jstack > /tmp/.txt
注意 换成自己之前 Java 进程的 PID。我们把它重定向到 /tmp 目录下面的 1.txt 文件,方便我们查询。
5. 查询异常:
此时我们可以 vim 刚刚的 1.txt 文件,搜索我们转换成 16 进制的 tid:

我们可以将这个内容丢给对应的开发,让他们取查看指定的代码就行了,作为运维,我们所能做的差不多就这些。
项目最终在开发对代码进行调整以后恢复,原因为请求第三方接口,然后等待在那里,出了问题。
最后,由于个人不是开发,又不是大牛,可能文中有些地方写的不对,希望大家能够在评论中补充出来。我好及时调整以免误导看到的朋友。
记一次 Java 项目 CPU 占用久高不下故障处理的更多相关文章
- 记一次java应用cpu利用率过高调试经历
1,现象 写的一个storm应用,主要是通过mysql的binlog来同步表到hbase.运行一段时间后发现,经常会出现cpu使用率飙升到200%以上,然后各种消息堆积报警等等出现各种问题 2,调研过 ...
- java程序 cpu占用过高分析
linux终端下用 top命令看到cpu占用超过100%.之所以超过100%.说明cpu是多核.默认top显示的是cpu加起来的使用率,运行top后按大键盘1看看,可以显示每个cpu的使用率,top里 ...
- 面试问题---JAVA程序CPU占用过高怎么定位
今天一个电话面试问了这个问题.回来查了下答案,自己也顺带操作一遍,做个记录.之前知道jstack工具可以查看线状态这些.比如死锁这些,主要是之前不知道top -H -p pid这个命令的使用,这命令可 ...
- 排查linux下java应用cpu占用过高
用于快速排查Java的CPU性能问题(top us值过高),自动查出运行的Java进程中消耗CPU多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用.目前只支持Linux.原因是Mac.Win ...
- linux Java项目CPU内存占用高故障排查
linux Java项目CPU内存占用高故障排查 top -Hp 进程号 显示进程中每个线程信息,配合jstack定位java线程运行情况 # 线程详情 jstack 线程PID # 查看堆内存中的对 ...
- 一次java Cpu占用过高的排查
某一个项目CPU占用率一直很高,经常在40%-50%之间,最近比较闲,就开始了排查工作. 1.通过 jstack命令输出进程的堆栈信息 jstack 2788 >C:\log.txt 将堆栈信息 ...
- 记一次用arthas排查jvm中CPU占用过高问题
记一次使用arthas排查jvm中CPU占用过高问题.这工具屌爆了 碾压我目前使用的全部JVM工具. 安装 小试 curl -O https://arthas.aliyun.com/arthas-bo ...
- Apache 整合 Tomcat (首先Apache 发布的是PHP项目,占用端口80,tomcat 发布的是Java 项目,占用端口8080)
情况简介: Apache 整合 Tomcat (首先Apache 发布的是PHP项目,占用端口80,tomcat 发布的是Java 项目,占用端口8080),而现在是虚拟出来两个域名(希望这两个域名都 ...
- java 一次CPU占用过高问题的排查及解决
最近一段时间 某台服务器上的一个应用总是隔一段时间就自己挂掉 用top看了看 从重新部署应用开始没有多长时间CPU占用上升得很快 排查步骤 1.使用top 定位到占用CPU高的进程PID ...
随机推荐
- ansible模块之command、shell、script、file、copy、fetch
前戏 ansible 批量在远程主机上执行命令 openpyxl 操作excel表格 puppet ansible slatstack ansible epel源 第一步: 下载epel源 wget ...
- 基于Mustache实现sql拼接
目录 一.前言 二.Mustache语法 三.Mustache拼接sql 一.前言 Mustache语法是一种模板语法,它可以帮我们拼接我们想要的东西.入职新公司,而项目里的sql语句就是用Musta ...
- Windows 10 中CPU虚拟化已开启,但是docker无法运行
在管理员模式下的PowerShell中执行: bcdedit /set hypervisorlaunchtype Auto 然后重启电脑即可
- Android H5混合开发(2):自定义Cordova插件
前言 Cordova虽然定义了很多基础的插件,供H5端使用原生设备的功能. 但是,如果业务相关的功能,需要提供给H5端使用,那么,就需要我们自定义插件了. 这个"自定义"不是指由A ...
- 入门Android底层需要的一些技能
<Android的设计与实现> Android框架层<Linux系统编程手册> Linux系统编程<Android内核剖析> 编译框架和romC语言和Linux内核 ...
- hadoop2.6集群环境搭建
版权声明:本文为博主原创文章,未经博主允许不得转载. 一.环境说明 1.机器:一台物理机 和一台虚拟机 2.Linux版本:[Spark@S1PA11 ~]$ cat /etc/issueRed Ha ...
- java多线程回顾3:线程安全
1.线程安全问题 关于线程安全问题,有一个经典案例:银行取钱问题. 假设有一个账户,有两个线程从账户里取钱,如果余额大于取钱金额,则取钱成功,反之则失败. 下面来看下线程不安全的程序会出什么问题. 账 ...
- HTML 转 PDF 之 wkhtmltopdf
wkhtmltopdf是一个可以把html转为pdf的插件,有windows.linux等平台的版本,比较简单 官网下载 https://wkhtmltopdf.org/downloads.html ...
- 【SQL】安装后设置 sa账号登录
1.windows身份验证登录管理员账户 2.找到sa账号双击 3.设置密码,启用 4.右键 属性 安全性 5.重启服务,sa账号登录 本地服务用 . 6.登录成功:
- volatile变量能保证线程安全性吗?为什么?
在谈及线程安全时,常会说到一个变量——volatile.在<Java并发编程实战>一书中是这么定义volatile的——Java语言提供了一种稍弱的同步机制,即volatile变量,用来确 ...