Redis 響應延遲問題排查
參考原文:http://redis.io/topics/latency
最近數據量越來越多,并發寫操作很多的情況下,Redis出現響應慢的情況;
可以使用 Redis命令來測試一下redis的響應速度:
redis-cli --latency -h 'xxx' -p 'xxxx'
這條命令會向Redis插入示例數據來檢查平均延時。 Ctrl+C可以隨時結束測試;
下面我們列一下會出現延時的可能:
-
硬件,系統:硬件問題是所有問題最底層的問題了,如果硬件慢,例如CPU主頻低,內存小,磁盤IO慢,這些會讓所有運行在上面的系統響應慢;另外,使用虛擬機會讓系統運行的性能太為下降;當然,有錢的話,這問題很容易解決;系統方面,Linux本身的系統資源調度也會產生一定的延時。這些一般不會很大,可以忽略不計;
-
網絡:如果客戶端和redis在同一臺服務器上,使用socket建立連接會比監聽 TCP/IP 端口快很多;
-
Redis命令:一些時間復雜度比較高的命令,如 lrem,sort,sunion等命令會花比較長時間;另外,大量的重復連接也會造成延時,重用連接是一種很好的品質;如果有大量寫操作,可以使用 pipeline 管道的方式(類似mysql事務),一次性提交,這樣數據量也少了,連接次數也少了,不用每次都返回數據,速度自然會快很多;
-
持久化:Redis持久化需要fork出一個進程來進行持久化操作,這本身就會引發延時,如果數據變化大,RDB配置時間短,那這個代價還是挺大的;再加上,硬盤這東西真有點不靠譜,如果還是虛擬機上的虛擬硬盤,如果還是NFS共享目錄,那這延時會讓你崩潰。所以,如果系統不需要持久化,關了吧。
Redis提供了SlowLog可以供我們分析執行速度慢的命令,可以分析一下;操作系統方面,可以使用 iostat 查看一下硬盤速度,使用 vmstat 查看一下內存分頁情況;
整體優化好,系統響應才會更快;
來自:http://my.oschina.net/ifeixiang/blog/365649