微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 在Rails应用程序中查找内存泄漏

我在 Ruby on Rails中有一个Web应用程序.我们使用在apdhe httpd上启动的mongrel集群来运行应用程序.我们一直面临应用程序中大量内存消耗的问题. (RedHat,Ruby 1.8.7,Rails 2.3.5,RAM 8GB)

事情是在我们启动Web服务器(启动mongrel集群)之后,内存使用率似乎在增加.例如,如果我启动Web服务器时的空闲内存(RAM)为6GB. 2天后,即使在站点没有流量的情况下,可用内存也会变为3GB.如果Web服务器没有重新启动一周,内存似乎增加并使用完整的8GB RAM并导致“无内存分配”问题,如使用“PrinceXML”生成pdf,使用sendmail发送邮件(我认为这些是记忆).重新启动Web服务器后,可用内存将恢复为6GB.

这是Rails应用程序中的内存泄漏情况吗?如何检查应用程序的内存泄漏?我找到了一个用于检查内存泄漏的工具bleak_house,但是当我将它作为一个宝石安装时,如this link所示,当我运行’bleak /tmp/bleak.5979.000.dump’进行分析时,它发现没有命令惨淡.

我使用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

解决方法

我尝试使用乘客(它会自动重新启动和管理内存中变得过大的rails实例 – 比重新启动那些偏离了合理内存限制的mongrel更容易).另外,你可能会对运行1.8.7的ruby企业版fork有好运,它从1.9回溯了一些内存管理修复(比如允许VM在使用更少的内存时缩小) – 这种改变可能已经恢复正常1.8.7虽然虽然我不确定. REE的主张是,对于rails应用程序,可以减少33%的内存消耗.

Ruby的东西通常会随着时间的推移而增长,需要重新启动,而乘客则会自动为您完成.它对我来说很完美,所以我真的可以推荐它.

http://www.modrails.com/

它还具有良好的内存分析功能

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐