搜索

首页  >  问答  >  正文

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

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

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

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

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

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

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

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

PHP中文网PHP中文网2802 天前782

全部回复(2)我来回复

  • 高洛峰

    高洛峰2017-04-24 09:15:53

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

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

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

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

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

    回复
    0
  • 黄舟

    黄舟2017-04-24 09:15:53

    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方式.

    回复
    0
  • 取消回复