2012-07-22 67 views
2

我在ubuntu VPS(1GB RAM)上運行rails應用程序(Passenger和nginx與mongodb和memcached)應用程序 - 幾天後,我看到啓動nginx後,儘管服務器上沒有任何請求,但ruby進程緩慢佔用了盒子的所有內存。 new_relic顯示以下 enter image description hereRails應用程序佔用了所有服務器內存

頂部輸出

top - 12:02:23 up 2:47, 1 user, load average: 0.03, 0.02, 0.00 
Tasks: 16 total, 1 running, 15 sleeping, 0 stopped, 0 zombie 
Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 1048576k total, 1048576k used,  0k free,  0k buffers 
Swap:  0k total,  0k used,  0k free,  0k cached 

9993 mongodb 18 0 128m 29m 21m S 0 2.9 0:17.06 mongod                      
1135 nobody 18 0 71664 18m 856 S 0 1.8 0:00.55 memcached        
14310 passenge 15 0 500m 434m 4660 S 0 42.5 0:13.59 ruby 
15496 passenge 15 0 425m 360m 4648 S 0 35.3 0:13.06 ruby 

我覺得有一些代碼泄漏內存 - 或者我需要時,他們到達某個閾值以某種方式殺死乘客昂貴的紅寶石過程。 請分享這兩個問題的一些想法。

回答

0

很難回答,因爲沒有太多的信息可以繼續下去,所以我會相當一般地回答這個問題。顯示隨時間變化的內存使用情況的圖形或顯示響應時間降低的圖形會很有幫助。

無論如何,我有一個類似的設置(Rails/Passenger/Nginx/MongoDB/VPS-1GB)。

  • 首先確認您的通過檢查日誌中沒有任何要求的假設,確認沒有請求(並確保記錄在Nginx的被打開足夠)

  • 嘗試禁用New Relic的(因爲這心跳到他們隨着時間的推移服務器),並審查你有任何其他監測軟件(如Nagios)。

  • 嘗試一個免費的負載測試應用程序(例如,http://loadimpact.com),並觀察你的內存/ GC和處理器圖形,當它被積極負載測試。如果你看到內存使用量超過健康數量,你可以打賭你有內存泄漏的地方。

如果你發現自己做的,它實際上只是一個消除變量的事情 - 我會掛起的Rails在Nginx的,但你可以不帶前端運行Rails,或關閉乘客,只是打所有的靜態Nginx的資產來嘗試找到原因。

希望這會有所幫助。

相關問題