服务器IO问题(疑似Redis导致的)

hanyouqing
  • 778

某生产环境服务器(多个服务都安装在1台服务器上)

服务器负载一致居高不下,升级过硬件以后有好转,CPU和内存的有所缓解,不过磁盘IO的依然如故;

使用nmon查看由多块磁盘组成一个LVM分区,写一直是100%;

使用lsof查看,该分区的主要读写的是MySQL和Redis;

使用iotop查看io排行,前几个分别是:

[jbd2/dm-0-8]
[flush-253:0]
[redis]
[mysql]

对前2个进程不太了解,有没有那位比较熟悉的大神指点下,前2个进程的用途以及他们和Redis的IO优化建议;

回复
阅读 7.1k
2 个回答

排查这个问题从三方面考虑:
1、应用层

  • redis 状态监控,看是否有应用性能问题

  • mysql 状态监控,查看慢查询日志等相关的问题点

2、系统层
flush-253:0jbd2/dm-0-8 他们都是操作系统真对磁盘和文件系统的进程,本质上来说还是 应用层产生的系统操作。

3、硬件
查看磁盘状态,服务器硬件问题

redis io高的问题我遇到过,和rdb方式存盘有关
redis默认配置
save 900 1
save 300 10
save 60 10000
以上表示的意思是,
900秒之内对服务进行了至少一次修改 或
300秒之内服务器进行了至少10次修改 或
60秒之内对服务器进行了至少10000次修改
会触发一次存盘.
rdb方式是会将主进程fork一个子进程,然后将子进程的数据全部存到磁盘上,注意是全部.
也就是说,比如你有一个redis占用了10G内存,那么每隔最多900秒,这10G内存里的数据会全部存到磁盘上,如果你的设备io能力比较差,或者redis数据量还要更大,那么会出现在一个存盘周期里无法完成存盘操作,这样的话,就会一直存盘,就会引发io高.
解决的办法可以
1 延长redis存盘的周期.
2 对redis进行切分,单个redis进程不要保存太多数据.
3 尝试使用aof方式.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏