2016-02-24 28 views
2

我在Ubuntu 14.04上安裝了redis安裝,而且我似乎幾乎每週都會完成RDB快照問題。 Redis版本是3.0.4 64位。什麼可能導致Redis RDB快照失速?

3838:M 09年2月24日:46:28.826 *背景儲蓄終止成功
3838:M 09年2月24日:47:在60秒29.088 * 100000變化。保存...
3838:M 24 Feb 09:47:29.230 *後臺保存以pid啓動17281
17281:信號處理程序(1456338079)收到SIGTERM調度關閉程序...
3838:M 2月24日13:24: 19.358#保存後臺信號9
3838:M 24 Feb 13:24:19.622 * 10在900秒內變化。保存...
3838:M 13年2月24日:24:19.730 *背景儲蓄開始由PID 17477

你所看到的有,在9:47的後臺保存開始,但是當我發現它在下午1點24分,它似乎完全停滯。我發現分叉進程基本上沒有活動 - 它消耗的內存量並沒有增加。我試圖「殺死」孩子的過程,但它從來沒有真正退出過,所以我不得不用極端的偏見殺死它(-9)。

當事情變得糟糕,我得到了我的應用程序出現以下錯誤:

2016年2月24日13:11:12,046 [2344]錯誤kCollectors.Main - 同時加入到Redis的錯誤:沒有連接可用於服務此操作:SADD ALLCH

我的redis配置僅執行rdb快照(無AOF)。負載變化很大,每秒寫入數千次。

目前我處於沒有redis後臺保存成功的地步,後臺進程變得比我的虛擬機開始交換的常規進程大得多。這是我的TOP。 3838是我的redis實例,17477是後臺保存過程(如上所述):

top - 14:06:42 up 118 days,2:05,1 user,load average:1.07,1.07, 1.13
任務:總共81次,3次跑步,78次睡眠,0次停止,0次殭屍
%Cpu(s):0.8 us,1.5 sy,0.0 ni,45.8 id,51.3 wa,0.0 hi, 0.5 si,0.0 st
KiB Mem:總共8176996個,使用8036792,使用140204,使用120個緩衝器
KiB Swap:總計6289404個,使用3968236,2321168個免費。 4044緩存紀念品

PID USER PR NI VIRT RES SHR S%CPU%MEM TIME + COMMAND
36根部20 0 0 0 0 S 2.3 0.0 288:05.05 kswapd0
3838 RRR 20 0 77918363.734克612小號2.0 47.9 330:08.65 Redis的服務器
17477 RRR 20 0 77922286.606克364 d 1.0 84.7 0:43.49 Redis的服務器

回答

1

這是非常有趣的,因爲我不記得讀過這樣的問題,因此發現根本原因可能非常有用。

因此,您在這裏報告的子進程保持長時間活動,甚至繼續分配內存。如果不是進程內存中的數據損壞,我沒有解釋,導致RDB進程發現意外情況並以某種方式永遠循環。

幾個問題:

  1. ,如果你重新啓動該進程是否這甚至會發生? (但是,如果你可以避免重新啓動,並且你沒有重申,請不要這樣做,否則我們可能不再理解根本原因)。
  2. 當RDB保存處於活動狀態時,您是否看到CPU使用率很高,並且該進程使用ps/top運行?
  3. 您可以嘗試用gdb -p <pid>中斷進程並獲得進程的堆棧跟蹤?
  4. 您能否提供Redis INFO輸出來檢查版本和其他配置的事情和狀態?
  5. 您是否可以在發生這種情況時檢查free輸出?

TLDR:是否有可能系統內存不足,交換很多?因此,保存RDB文件時的子進程訪問了所有頁面,並強制所有內容都駐留在Resident Set中。系統無法應對這麼多的I/O,因此需要很長時間才能完成RDB保存。

編輯:我剛纔注意到你報告的內存信息:

昆明植物研究所紀念品:8176996總,使用8036792,140204免費,120個緩衝區

所以系統內存不足,並交換像瘋了似的,並且這導致上述行爲。隨着RDB節約開始,COW將使用大量額外的內存來推動服務器在內存上的限制。

謝謝。

+0

內存統計信息來自rdb子進行了一段時間之後。它並不是從交換狀態開始 - 事實上,它遠非如此。在寫入rdb大約10-15分鐘後,它進入該狀態。關於在重新啓動過程後是否發生這種情況,是指重新啓動孩子還是重新啓動父母?我之前已經重新啓動了孩子,並且它以相同的狀態結束。我最終不得不放下整個redis並重新啓動。 Cpu從不高 - 從未超過10%。明天我會嘗試獲取redis信息(雖然我給了版本) – longofest

+0

Btw ...我看到你是redis God :-)非常感謝你的回答。當它再次發生時,我一定會盡可能地捕捉到。如果我確實捕獲交換,是否只是增加內存的答案?我覺得這是一個愚蠢的問題,但我覺得有必要問......我的IT人員討厭這件事情已經如此大的記憶。我知道我可以啓動一個集羣,但是我必須站出來至少2個節點才能減少每個節點的大小,所以我們的農場內存總佔用空間顯着增加... – longofest

+1

@longofest 8G真的不是這些天來,服務器的RAM很多。我的筆記本電腦運行了兩次。 –

相關問題