2011-09-19 426 views
0

我有一個Jruby On Rails應用程序,它使用幾個WS來收集數據。應用程序處理數據將其顯示給用戶,用戶進行更改,然後發送回WS。Jruby,垃圾收集器,Redis

這裏的問題是,我將所有內容都存儲在使用內存存儲的緩存(基於會話)中。但不時有沒有明確的原因(至少我)這個錯誤彈出:

ActionView::Template::Error (GC overhead limit exceeded) 

我讀什麼我能找到它,顯然這意味着垃圾收集花費要多少時間在試圖自由記憶並沒有在這方面取得真正的進展。我的猜測是,因爲所有東西都存儲在內存緩存中,所以GC試圖釋放它,不能這樣做,並拋出這個錯誤。

所以這裏是問題。

  • 我該如何解決這個問題?
  • 如果我從內存存儲切換到Redis,如果我的假設是正確的,這個問題是否仍會出現。
  • GC是否會嘗試釋放Redis的內存區域? (可能是一個愚蠢的問題,但...請幫助:))

謝謝。

回答

0

Redis是一個獨立的進程,所以你的應用程序垃圾收集器不會觸及它。但是,redis可能會佔用應用程序可用的所有內存,或者實際上使用的是進程內存緩存,而不是redis,這是一種不同類型的內存存儲。