伺服器IO問題(疑似Redis導致的)
PHP中文网
PHP中文网 2017-04-24 09:13:53
0
2
783

某生產環境伺服器(多個服務都安裝在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中文网

认证高级PHP讲师

全部回覆(2)
小葫芦

排查這個問題從三方面考慮:
1、應用層

  • redis 狀態監控,看是否有應用效能問題

  • mysql 狀態監控,查看慢查詢日誌等相關的問題點

2、系統層
flush-253:0 和 jbd2/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方式.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板