【必看】 一篇 CPU 占用高,导致请求超时的故障排查
一、发现问题的系统检查
一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多。
二、定位故障
根据这种故障的一般处理思路,先找出问题进程内CPU占用率高的线程,再通过线程栈信息找出该线程当时在运行的问题代码段,操作如下:
根据思路查看高占用的“进程中”占用高的“线程”,追踪发现7163的进程中16298的线程占用较高,使用命令:
top -Hbp 7163 | awk '/java/ && $9>50'
显示结果:
将16298的线程ID转换为16进制的线程ID。
printf "%x\n" 16298
3faa
通过jvm的jstack查看进程信息,发现是调用数据库的问题。
jstack 7163 | grep "3faa" -A 30
显示结果:
既然是数据库的问题就检查数据库,思路是先打印了所有在跑的数据库线程,检查后发现跟进情况找到问题表:
打印mysql现有进程信息,并把信息生成log文件,使用的命令如下:
mysql -uroot -p -e "show full processlist" >mysql_full_process.log
过滤log文件,发现查询最多的表,使用的命令如下:
grep Query mysql_full_process.log
确认表中数据量,发现表中已经有将近300万条数据,判断问题是查询时间过长导致的,使用的命令如下:
use databases_name;
select count(1) from table_name;
确认表是否有索引,发现表未创建索引;
show create table table_name\G
三、确认及处理问题
询问了研发表的数据是否重要,确认不重要,检查字段有时间字段,根据时间确认只留一个月的数据,操作如下。
清理数据只保留一个月的数据,清理后数据只剩下4000多,使用命令如下
delete from table_name where xxxx_time < '2019-07-01 00:00:00' or xxxx_time is null;
由于表未加索引,所以给表创建索引,使用命令如下:
alter table table_name add index (device_uuid);
检查索引是否创建,已经有device_uuid的索引。
show create table table_name;
四、结果
处理后进程的CPU占用到了40%,本次排查主要用到了jvm进程查看及dump进程详细信息的操作,确认是由数据库问题导致的原因,并对数据库进行了清理并创建了索引。
五、其他
在处理问题后,又查询了一下数据库相关问题的优化,有方案说在mysql配置文件中添加innodb_buffer_pool_size参数也可以优化查询查询时间,但该参数的意义把数据放到内存了,也就是说如果数据更新了,还会导致buffer失效,通常的优化方法还是添加索引。该方法添加参数具体如下:innodb_buffer_pool_size=4G
【必看】 一篇 CPU 占用高,导致请求超时的故障排查相关推荐
- Java进程CPU占用高导致的网页请求超时的故障排查
作者:荣书 来源:https://blog.51cto.com/rongshu/2426712 一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load a ...
- mc java 连接超时_Java进程CPU占用高导致的网页请求超时的故障排查
一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多.  二.定位故障 根据这 ...
- WinDbg调试CPU占用高的问题 试验+实战 《第七篇》
WinDbg调试CPU占用高的问题 试验+实战 <第七篇> 一.High CPU试验 1.示例代码 static void Main(string[] args){Console.Clea ...
- WinDbg调试CPU占用高的问题
原文:WinDbg调试CPU占用高的问题 试验+实战 <第七篇> 一.High CPU试验 1.示例代码 static void Main(string[] args){Console.C ...
- SQLSERVER排查CPU占用高的情况
今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库 ...
- java进程CPU占用高如何排查-案例二
近期项目新版本上线遇到cpu冲高现象,依据之前的经验,把这次排查过程记录下. 这次排查参考了之前记录的经验,还是很有用的:java进程cpu占用高如何排查_停5s的博客-CSDN博客_java进程cp ...
- iphone11与android换机,苹果手机数据转移到新手机:iPhone 11用户换机必看——照片篇...
原标题:苹果手机数据转移到新手机:iPhone 11用户换机必看--照片篇 之前我们整理了iPhone 11用户换新手机导入旧手机微信数据.备忘录数据以及通讯录的方法,除去以上几种数据项以外,还有一种 ...
- 使用dlv分析golang进程cpu占用高问题
c++通过dbg分析内存和cpu,可能大家都会.本篇主要分析通过delve分析golang程序cpu占用高的问题. delve是golang推荐的专门go语言调试工具,用来替代gdb.golang组织 ...
- 服务器CPU占用高问题处理记录
服务器CPU占用高问题处理记录 发现问题 客户采购的硬件服务器,我在上面从零开始搭建环境,部署微服务那一套,最近发现在服务器上执行命令卡顿,需要等1-2秒才能出来结果,然后执行 top 发现CPU占用 ...
最新文章
- linux日期日增,Linux日期
- redis geohash 学习笔记
- Spark SQL 函数全集
- Windows Mobile 6.0下实现自绘多种状态按钮(Win32) 续
- php和java 2017_Php与java的区别
- python爬虫运行一遍后再运行不成功_python爬虫 - pyspdier run时运行到on_start就停止 但是单步调试可继续...
- 64位电脑c语言程序下载,vc2010 x64位
- 新路由3 Newifi3 D2 Lede固件
- win7 双屏 双工具栏_Win7双屏复制/双屏扩展设置教程
- 好程序员分享面向对象概念的理解以及ES3和ES6中类的写法
- 铁路cj继电器_铁路信号继电器简介讲解
- switch语句及其嵌套
- java 句柄无效_Java开发网 - java.io.IOException: 句柄无效???
- 华中科技计算机第七次作业,电路理论(黑皮版) 华中科技大学陈明辉第7章
- 荣耀3路由器设置虚拟服务器,荣耀路由3怎么设置上网?(电脑)
- XXX XXX Company introduction个人特点英语描述
- e的近似求解方法matlab,3X^2-E^X并用matlab切线法求出所有实根的近似值,源程序
- 查看Linux内核修改及更新记录方法
- 腾讯35万年薪难求才 都去了微软和谷歌
- 【解决方案】国标GB28181协议摄像头直播EasyGBS视频平台联合城管执法局搭建4G移动视频监控系统方案