加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:15:58 所属栏目:百科 来源:网络整理
导读:我在 Ruby on Rails中有一个Web应用程序.我们使用在apdhe httpd上启动的mongrel集群来运行应用程序.我们一直面临应用程序中大量内存消耗的问题. (RedHat,Ruby 1.8.7,Rails 2.3.5,RAM 8GB) 事情是在我们启动Web服务器(启动mongrel集群)之后,内存使用率似乎在
我在 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读