某生产环境服务器(多个服务都安装在1台服务器上)
服务器负载一致居高不下,升级过硬件以后有好转,CPU和内存的有所缓解,不过磁盘IO的依然如故;
使用nmon查看由多块磁盘组成一个LVM分区,写一直是100%;
使用lsof查看,该分区的主要读写的是MySQL和Redis;
使用iotop查看io排行,前几个分别是:
[jbd2/dm-0-8]
[flush-253:0]
[redis]
[mysql]
对前2个进程不太了解,有没有那位比较熟悉的大神指点下,前2个进程的用途以及他们和Redis的IO优化建议;
高洛峰2017-04-24 09:15:53
排查这个问题从三方面考虑:
1、应用层
redis 状态监控,看是否有应用性能问题
mysql 状态监控,查看慢查询日志等相关的问题点
2、系统层
flush-253:0 和 jbd2/dm-0-8 他们都是操作系统真对磁盘和文件系统的进程,本质上来说还是 应用层产生的系统操作。
3、硬件
查看磁盘状态,服务器硬件问题
黄舟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方式.