遇到liunx服务器IO负载,读IO流量峰值347MB/s,排查并解决。

前言:

根据监控报警看到IO读的速度为347MB/s。

统计时间区段 统计时长 IOPS IO流量 状态

1 工作日上班时间段:08:00-18:00 1小时平均值 >2000 >200 MB/s 异常

4小时平均值 >1500 >150 MB/s 异常

8小时平均值 >1000 >100 MB/s 异常

持续7天 >500 >50 MB/s 异常

2 工作日非上班时段:18:00-08:00 1小时平均值 >4000 >300 MB/s 异常

4小时平均值 >3000 >200 MB/s 异常

12小时平均值 >2000 >100 MB/s 异常

持续7天 >1000 >80 MB/s 异常

通过iostat、iotop、top、vmstat 、pidstat命令排查

查看磁盘 I/O 整体情况

bash 复制代码
iostat -x 1 10
参数解释:-x 表示显示详细信息;1 表示每隔 1 秒输出一次数据;10 表示总共输出 10 次。
关键指标分析:关注 %util(设备利用率)、r/s(每秒读取次数)、w/s(每秒写入次数)、r_await(读请求平均等待时间)、w_await(写请求平均等待时间)等指标。若 %util 接近或达到 100%,说明磁盘设备繁忙;r_await 和 w_await 数值高则表示 I/O 请求等待时间长。

可报告虚拟内存统计信息,也能显示磁盘 I/O 情况。

bash 复制代码
vmstat
参数解释:每隔 1 秒输出一次数据。

定位高 I/O 进程

bash 复制代码
iotop
使用方法:直接运行该命令后,会按 I/O 使用率降序显示进程信息。可以看到每个进程的读写速率、累计读写数据量等信息,从而快速定位产生大量 I/O 的进程。

用于监控指定进程或所有进程的 I/O 统计信息。

bash 复制代码
pidstat -d 1
参数解释:-d 表示显示 I/O 统计信息;1 表示每隔 1 秒输出一次数据。

1、通过iotop命令看出mysql查看进程占用cpu和free使用率高;

2、使用iostat命令查看出mysql这个进程占用io比较高;

3、然后登陆mysql 执行这条sql语句查看是否有锁表的show full processlist;(查看有两个查询语句卡死在那了,直接使用kill 杀掉,但是过一会儿还是没有正常。)

4、通过SHOW OPEN TABLES WHERE In_use > 0; 这条sql语句进行查询返回1的表名说明正在锁表不能对这张表进行操作,查看出一张表正在锁表,然后查看这是一张日志表数据比较大,没有用的垃圾数据进行清理掉了。

5、清理完日志表进行查看是否还有锁表的,发现没有锁表的了。于是加了一个定时任务,每天清理这张日志表的垃圾数据。

6、此服务器只部署了mysql,所以第一时间就定位到了mysql。

相关推荐
liu****3 分钟前
11.Linux进程信号(三)
linux·运维·服务器·数据结构·1024程序员节
csdn_aspnet6 分钟前
CentOS 7 上安装 MySQL 8.0
linux·mysql·centos
郝学胜-神的一滴6 分钟前
Linux下,获取子进程退出值和异常终止信号
linux·服务器·开发语言·c++·程序人生
shumeigang8 分钟前
nginx实用配置
运维·nginx
檀越剑指大厂16 分钟前
【Nginx系列】Tengine:基于 Nginx 的高性能 Web 服务器与反向代理服务器
服务器·前端·nginx
fufu03111 小时前
俄罗斯方块
linux·运维·服务器
合作小小程序员小小店1 小时前
web安全开发,在线%服务器日志入侵检测%系统安全开发,基于Python,flaskWeb,正则表达式检测,mysql数据库
服务器·python·安全·web安全·flask·安全威胁分析·安全架构
chen_note2 小时前
Kubernetes1.23版本搭建(三台机器)
运维·容器·kubernetes·云计算·kubepi
花落已飘2 小时前
openEuler WSL2容器化开发实战:Docker Desktop集成与应用部署
运维·docker·容器
stevenzqzq2 小时前
Android Hilt 入门教程_传统写法和Hilt写法的比较
android