2011-09-15 74 views
4

我在Ruby on Rails中有一個Web應用程序。我們使用apcahe httpd啓動的混合簇來運行應用程序。我們在應用程序中一直面臨着巨大的內存消耗問題。 (RedHat,Ruby 1.8.7,Rails 2.3.5,RAM 8GB)在Rails應用程序中查找內存泄漏

事情是在我們啓動web服務器(啓動mongrel集羣)後,內存使用量似乎在增加。例如,如果啓動Web服務器時的空閒內存(RAM)爲6GB。 2天后,即使在網站沒有流量時,空閒內存也變爲3GB。如果網絡服務器沒有重新啓動一週,內存似乎會增加並且使用全部8GB內存,並導致使用「PrinceXML」的pdf生成過程中的「無內存分配」問題,使用sendmail發送郵件(我認爲這些是記憶)。當Web服務器重新啓動時,可用內存將回到6GB。

這是Rails應用程序中內存泄漏的情況嗎?如何檢查內存泄漏的應用程序?我找到了一個檢查內存泄漏的工具bleak_house,但是當我把它安裝成如this link所示的寶石時,當我運行'慘淡的/tmp/bleak.5979.000.dump'來分析時,它給出No command bleak found

我使用PrinceXML生成PDF報告和sendmail用於郵件發送目的。該服務器還有一個運行Jasper Server的實例。 任何人請幫助

以下是內存過載時top命令的結果。

-bash-3.2$ top 

top - 10:34:10 up 14 days, 7:40, 2 users, load average: 0.24, 0.40, 0.39 
Tasks: 181 total, 1 running, 177 sleeping, 2 stopped, 1 zombie 
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 8173984k total, 8011564k used, 162420k free, 10044k buffers 
Swap: 2096472k total, 152624k used, 1943848k free, 2012016k cached 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND    
    858 **nt*rsc 15 0 12748 1168 832 R 173.5 0.0 0:00.36 top    
    1 root  15 0 10356 108 76 S 0.0 0.0 0:17.10 init    
    2 root  RT -5  0 0 0 S 0.0 0.0 0:00.10 migration/0   
    3 root  34 19  0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0   
    4 root  RT -5  0 0 0 S 0.0 0.0 0:00.00 watchdog/0   
    5 root  RT -5  0 0 0 S 0.0 0.0 0:00.12 migration/1   
    6 root  34 19  0 0 0 S 0.0 0.0 0:00.12 ksoftirqd/1   
    7 root  RT -5  0 0 0 S 0.0 0.0 0:00.00 watchdog/1   
    8 root  RT -5  0 0 0 S 0.0 0.0 0:00.70 migration/2   
    9 root  34 19  0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/2   
    10 root  RT -5  0 0 0 S 0.0 0.0 0:00.00 watchdog/2   
    11 root  RT -5  0 0 0 S 0.0 0.0 0:00.67 migration/3   
    12 root  34 19  0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/3   
    13 root  RT -5  0 0 0 S 0.0 0.0 0:00.00 watchdog/3   
    14 root  10 -5  0 0 0 S 0.0 0.0 0:00.00 events/0   
    15 root  10 -5  0 0 0 S 0.0 0.0 0:00.00 events/1   
    16 root  10 -5  0 0 0 S 0.0 0.0 0:00.00 events/2 

回答

3

我會嘗試使用乘客(自動重新啓動和管理在內存增長過大的軌道情況下 - 比重啓已關閉偏離理智的內存限制雜種容易得多)。你也可能會碰到1.8.7的ruby企業版fork,它支持從1.9開始的一些內存管理修復(比如當它使用更少的內存時允許虛擬機縮小) - 這種改變可能已經起作用了,但它回到了正常的1.8.7雖然我不確定。與稀土元素的索賠是,你可以減少33%的軌道應用程序的內存消耗。

紅寶石的東西一般傾向於隨着時間的推移而增長,需要重新啓動,乘客會自動爲你做。這對我來說非常合適,所以我可以真正推薦它。

http://www.modrails.com/

它還具有良好的內存分析功能

http://www.modrails.com/documentation/Users%20guide%20Apache.html#_analysis_and_system_maintenance

+0

ModRails似乎是答案,我們現在是有Rails中的所有部署問題......我一定會嘗試出.. – rubyprince