定位磁盘I/O过高的方法

前段时间,在实际生产环境中遇到了这样的问题:每天定时5点钟进行mysql的数据备份,Zabbix会触发自带的报警I/O isoverload,所以想总结一下,关于遇到了磁盘I/O读写过高的情况分析。

1.开始判定具体时间

关于sar命令可以查看具体的使用方法:

传送门:http://blog.youkuaiyun.com/zhoutimo/article/details/52021960

进入sar命令默认存储的历史记录路径/var/log/sa/

使用sar查看昨天的关于磁盘发生的异常

sar -d -f sa26

输出发现5点钟左右I/O读写开始变大



2.判定具体进程影响了I/O读写

要使用block_dump工具,如果使用block_dump那么需要关闭syslog,否则klog会打印很多日志到messages中,这样更加让系统不堪重负。
①service syslog stop
②打开block dump:
echo 1 > /proc/sys/vm/block_dump
③统计方法:
[root@f161 mm]# dmesg | egrep "READ|WRITE|dirtied" | egrep -o '([a-zA-Z]*)' | sort | uniq -c | sort -rn | head
   2002 on
   1986 block
   1962 WRITE
   1936 xvdb
   1759 mysqld
    182 kjournald
     27 xvdd
     24 READ
     21 xvdc
     18 xvda

根据实际情况确认具体是哪个进程影响了I/O读写

④不要忘记在抓完之后关掉block_dump和启动syslog:
echo 0 > /proc/sys/vm/block_dump
service syslog start

解决因磁盘I/O过导致系统变卡问题,需要从多个角度入手,包括确认并诊断I/O的原因、应用层面的优化、系统和硬件层面的优化、持续监控与分析以及其他优化措施 [^1]。 ### 确认并诊断I/O的原因 使用block_dump工具(使用时需关闭syslog,否则klog会打印很多日志到messages中,使系统不堪重负)定位磁盘I/O过的进程和磁盘。示例操作如下: ```bash # 停止syslog服务 service syslog stop # 打开block dump echo 1 > /proc/sys/vm/block_dump # 统计方法 dmesg | egrep "READ|WRITE|dirtied" | egrep -o '([a-zA-Z]*)' | sort | uniq -c | sort -rn | head ``` 此操作能找出频繁进行读写操作的进程和磁盘,判断是磁盘参数有问题,还是应用有问题,或是磁盘硬件能力不足 [^2][^4]。 ### 应用层面优化 - **优化应用程序代码**:检查应用程序中是否存在大量的磁盘读写操作,优化代码逻辑,减少不必要的磁盘I/O。例如,避免在循环中频繁进行磁盘读写,可将数据缓存到内存中,批量进行磁盘操作。 - **调整应用程序配置**:根据应用程序的特点,调整相关配置参数。如数据库应用,可调整数据库的缓存大小、日志写入方式等参数,减少磁盘I/O。 ### 系统和硬件层面优化 - **系统层面**: - **调整磁盘调度算法**:不同的磁盘调度算法适用于不同的工作负载。例如,对于随机I/O较多的应用,可使用 deadline 调度算法;对于顺序I/O较多的应用,可使用 cfq 调度算法。通过修改 `/sys/block/[磁盘名]/queue/scheduler` 文件来调整调度算法。 - **优化文件系统参数**:根据磁盘的使用情况,调整文件系统的相关参数,如块大小、inode 数量等,以提磁盘I/O性能。 - **硬件层面**: - **升级磁盘硬件**:将机械硬盘更换为固态硬盘(SSD),SSD 的读写速度远于机械硬盘,能显著提磁盘I/O性能。 - **增加磁盘数量**:通过 RAID 技术将多个磁盘组合在一起,提磁盘的读写性能和可靠性。 ### 持续监控与分析 使用监控工具(如 iostat、iotop 等)持续监控磁盘I/O情况,及时发现磁盘I/O异常的情况,并分析原因,采取相应的措施进行优化。 ### 其他优化措施 - **使用缓存技术**:在应用程序和磁盘之间添加缓存层,如使用 Redis 等缓存数据库,将经常访问的数据缓存到内存中,减少对磁盘的直接访问。 - **进行写入合并**:操作系统在进行写入时,会进行写入合并,将相邻的写请求进行合并,以实现局部的顺序I/O,提磁盘写入效率 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值