一、发现问题的系统检查

一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查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 占用高,导致请求超时的故障排查相关推荐

  1. Java进程CPU占用高导致的网页请求超时的故障排查

    作者:荣书 来源:https://blog.51cto.com/rongshu/2426712 一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load a ...

  2. mc java 连接超时_Java进程CPU占用高导致的网页请求超时的故障排查

    一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多.  二.定位故障 根据这 ...

  3. WinDbg调试CPU占用高的问题 试验+实战 《第七篇》

    WinDbg调试CPU占用高的问题 试验+实战 <第七篇> 一.High CPU试验 1.示例代码 static void Main(string[] args){Console.Clea ...

  4. WinDbg调试CPU占用高的问题

    原文:WinDbg调试CPU占用高的问题 试验+实战 <第七篇> 一.High CPU试验 1.示例代码 static void Main(string[] args){Console.C ...

  5. SQLSERVER排查CPU占用高的情况

    今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库 ...

  6. java进程CPU占用高如何排查-案例二

    近期项目新版本上线遇到cpu冲高现象,依据之前的经验,把这次排查过程记录下. 这次排查参考了之前记录的经验,还是很有用的:java进程cpu占用高如何排查_停5s的博客-CSDN博客_java进程cp ...

  7. iphone11与android换机,苹果手机数据转移到新手机:iPhone 11用户换机必看——照片篇...

    原标题:苹果手机数据转移到新手机:iPhone 11用户换机必看--照片篇 之前我们整理了iPhone 11用户换新手机导入旧手机微信数据.备忘录数据以及通讯录的方法,除去以上几种数据项以外,还有一种 ...

  8. 使用dlv分析golang进程cpu占用高问题

    c++通过dbg分析内存和cpu,可能大家都会.本篇主要分析通过delve分析golang程序cpu占用高的问题. delve是golang推荐的专门go语言调试工具,用来替代gdb.golang组织 ...

  9. 服务器CPU占用高问题处理记录

    服务器CPU占用高问题处理记录 发现问题 客户采购的硬件服务器,我在上面从零开始搭建环境,部署微服务那一套,最近发现在服务器上执行命令卡顿,需要等1-2秒才能出来结果,然后执行 top 发现CPU占用 ...

最新文章

  1. linux日期日增,Linux日期
  2. redis geohash 学习笔记
  3. Spark SQL 函数全集
  4. Windows Mobile 6.0下实现自绘多种状态按钮(Win32) 续
  5. php和java 2017_Php与java的区别
  6. python爬虫运行一遍后再运行不成功_python爬虫 - pyspdier run时运行到on_start就停止 但是单步调试可继续...
  7. 64位电脑c语言程序下载,vc2010 x64位
  8. 新路由3 Newifi3 D2 Lede固件
  9. win7 双屏 双工具栏_Win7双屏复制/双屏扩展设置教程
  10. 好程序员分享面向对象概念的理解以及ES3和ES6中类的写法
  11. 铁路cj继电器_铁路信号继电器简介讲解
  12. switch语句及其嵌套
  13. java 句柄无效_Java开发网 - java.io.IOException: 句柄无效???
  14. 华中科技计算机第七次作业,电路理论(黑皮版) 华中科技大学陈明辉第7章
  15. 荣耀3路由器设置虚拟服务器,荣耀路由3怎么设置上网?(电脑)
  16. XXX XXX Company introduction个人特点英语描述
  17. e的近似求解方法matlab,3X^2-E^X并用matlab切线法求出所有实根的近似值,源程序
  18. 查看Linux内核修改及更新记录方法
  19. 腾讯35万年薪难求才 都去了微软和谷歌
  20. 【解决方案】国标GB28181协议摄像头直播EasyGBS视频平台联合城管执法局搭建4G移动视频监控系统方案

热门文章

  1. 2ex1逆向寒假生涯(24/100)
  2. 1.8 分割字符串(spilt())
  3. hdu oj1095题解
  4. ACM入门之【约数】
  5. 1086 Tree Traversals Again (25 分)【一般 / 建树 树的遍历】
  6. 大数取余的原理和模板
  7. Synchronize对象改变
  8. MySQL解决root用户密码丢失问题
  9. 北京计算机在职研究生双证学校,北京在职研究生目前有哪些学校开设了双证专业?...
  10. Redis 16 大应用场景,竟然这么多。。