IO负载高定位记录

    某台服务器的IO负载很高(iostat中的util),但是无法快速的定位到IO负载的来源进程和来源文件,查到是mysql导致的,不过不能定位是那个文件最占用IO

zabbix图形:

zabbix cpu图形

# top

top

可以见到zabbix图形有规则性,可能是定时任务导致,top命令可以见到cpu的%wa很高,io在等待写入。

排查系统日志,关掉系统所有定时任务发现问题没有消失,可能是程序定时任务导致?再排查,开发屏蔽当前版本的定时任务,问题还是没有消失。


定位IO负载来源:

一、# iotop

iotop

可以见到jbd2进程某时刻占用IO达到99%,导致IO阻塞,mysql连接断掉,用户反映访问出现缓慢。

JDB2导致磁盘io使用率高?

参考网上一篇文章,http://xujpxm.blog.51cto.com/8614409/1674378

http://ju.outofmemory.cn/entry/178162

1、yum update kernel 用yum升级系统内核,重启之后查看是否有效;

2、缓解方法:修改commit值,降低文件系统提交次数或者禁用barrier特性;

建议文件系统参数为:defaults,noatime,nodiratime,barrier=0,data=writeback,commit=60

(可以通过修改fstab表或者remount重新挂载)

3、慎用方法:关闭文件系统日志功能    tune2fs -O "^has_journal" 例如: tune2fs -O "^has_journal" /dev/mapper/VolGroup-lv_home

问题还是没有解决,这次是mysql进程占用IO到99%。


二、pt-ioprofile定位负载来源文件

pt-ioprofile

可以看到占用IO的都是mysql日志文件和表结构文件

可能是mysql日志占用IO或者分配给mysql的内存空间不够?

关掉mysql的二进制文件写入,优化mysql的配置(增大内存,减少IO),问题还是没解决。


三、业务要求先迁移线上数据再进行测试,迁移数据库过程中报错:

这个库的'log_open_gift'表怎么备份都报错

有可能是备份正在达到MySQL超时限制,修改mysql配置。

参考网址:https://ottomatik.groovehq.com/knowledge_base/topics/solving-error-2013-lost-connection-to-mysql-server-during-query-when-dumping-table

net_read_timeout = 120

net_write_timeout = 900

增加max_allowed_pa​​cket设置。

max_allowed_pa​​cket = 512M

还是备份失败,判断为损坏的表,尝试修复无果,排查最后一步为ssd硬盘存在坏道?

# badblocks -v /dev/vdb1 > badsectors.txt

OK,9个坏道好样的。

记一次个人排查经过,如有不足或不妥,多谢指出~

你可能感兴趣的:(IO负载高定位记录)