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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |