2011-09-15 37 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