搜尋

首頁  >  問答  >  主體

伺服器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中文网2775 天前759

全部回覆(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
  • 取消回覆