前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一篇 CPU 占用高,导致请求超时的故障排查

一篇 CPU 占用高,导致请求超时的故障排查

作者头像
Criss@陈磊
发布2019-09-11 15:12:49
1.7K0
发布2019-09-11 15:12:49
举报
文章被收录于专栏:测试技术圈测试技术圈

一、发现问题的系统检查

一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多。

二、定位故障

根据这种故障的一般处理思路,先找出问题进程内CPU占用率高的线程,再通过线程栈信息找出该线程当时在运行的问题代码段,操作如下:

根据思路查看高占用的“进程中”占用高的“线程”,追踪发现7163的进程中16298的线程占用较高,使用命令:

代码语言:javascript
复制
top -Hbp 7163 | awk '/java/ && $9>50'

显示结果:

将16298的线程ID转换为16进制的线程ID。

代码语言:javascript
复制
printf "%x\n" 16298
3faa

通过jvm的jstack查看进程信息,发现是调用数据库的问题。

代码语言:javascript
复制
jstack 7163 | grep "3faa" -A 30

显示结果:

既然是数据库的问题就检查数据库,思路是先打印了所有在跑的数据库线程,检查后发现跟进情况找到问题表:

打印mysql现有进程信息,并把信息生成log文件,使用的命令如下:

代码语言:javascript
复制
mysql -uroot -p -e "show full processlist" >mysql_full_process.log

过滤log文件,发现查询最多的表,使用的命令如下:

代码语言:javascript
复制
grep Query mysql_full_process.log

确认表中数据量,发现表中已经有将近300万条数据,判断问题是查询时间过长导致的,使用的命令如下:

代码语言:javascript
复制
use databases_name;
select count(1) from table_name;

确认表是否有索引,发现表未创建索引;

代码语言:javascript
复制
show create table table_name\G

三、确认及处理问题

询问了研发表的数据是否重要,确认不重要,检查字段有时间字段,根据时间确认只留一个月的数据,操作如下。

清理数据只保留一个月的数据,清理后数据只剩下4000多,使用命令如下

代码语言:javascript
复制
delete from table_name where xxxx_time < '2019-07-01 00:00:00' or xxxx_time is null;

由于表未加索引,所以给表创建索引,使用命令如下:

代码语言:javascript
复制
alter table table_name add index (device_uuid);

检查索引是否创建,已经有device_uuid的索引。

代码语言:javascript
复制
show create table table_name;

四、结果

处理后进程的CPU占用到了40%,本次排查主要用到了jvm进程查看及dump进程详细信息的操作,确认是由数据库问题导致的原因,并对数据库进行了清理并创建了索引。

五、其他

在处理问题后,又查询了一下数据库相关问题的优化,有方案说在mysql配置文件中添加innodb_buffer_pool_size参数也可以优化查询查询时间,但该参数的意义把数据放到内存了,也就是说如果数据更新了,还会导致buffer失效,通常的优化方法还是添加索引。该方法添加参数具体如下:innodb_buffer_pool_size=4G

作者:荣书 转载:高效运维 来源:https://blog.51cto.com/rongshu/2426712

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 质问 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、发现问题的系统检查
  • 二、定位故障
  • 三、确认及处理问题
  • 四、结果
  • 五、其他
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档