当前位置:  开发笔记 > 后端 > 正文

ruby/ruby​​ on rails内存泄漏检测

如何解决《ruby/ruby​​onrails内存泄漏检测》经验,为你挑选了4个好方法。

我在rails上使用ruby编写了一个小型Web应用程序,其主要目的是上传,存储和显示xml(文件最多可达几MB)文件的结果.运行了大约2个月后,我注意到mongrel进程使用了​​大约4GB的内存.我做了一些关于调试ruby内存泄漏的研究,并且找不到多少.所以我有两个问题.

有没有什么好的工具可以用来查找Ruby/rails中的内存泄漏?

什么类型的编码模式导致ruby中的内存泄漏?

Dave Nolan.. 39

在Rails中找到内存泄漏的一些技巧:

使用Bleak House插件

实现Scout监控,特别是内存使用情况分析器

实施FiveRuns监控

尝试另一个简单的内存使用记录器

第一个是对ObjectSpace中对象的内存使用情况的图形化探索.

最后两个将帮助您确定增加内存使用量的特定使用模式,您可以从那里开始工作.

至于具体的编码模式,根据经验,你必须观看任何处理文件io,图像处理,处理大量字符串等的事情.

我会检查你是否使用了最合适的XML库 - 众所周知ReXML很慢并且被认为是漏洞(我没有证明这一点!).还要检查是否可以记住昂贵的操作.



1> Dave Nolan..:

在Rails中找到内存泄漏的一些技巧:

使用Bleak House插件

实现Scout监控,特别是内存使用情况分析器

实施FiveRuns监控

尝试另一个简单的内存使用记录器

第一个是对ObjectSpace中对象的内存使用情况的图形化探索.

最后两个将帮助您确定增加内存使用量的特定使用模式,您可以从那里开始工作.

至于具体的编码模式,根据经验,你必须观看任何处理文件io,图像处理,处理大量字符串等的事情.

我会检查你是否使用了最合适的XML库 - 众所周知ReXML很慢并且被认为是漏洞(我没有证明这一点!).还要检查是否可以记住昂贵的操作.


Bleak House的帖子是从2007年开始的,今天仍然是一个有效的选择吗?

2> Daniel Beard..:

在每个请求之后或之前记录内存使用的一种超级简单方法(仅适用于Linux).

#Put this in applictation_controller.rb
before_filter :log_ram # or use after_filter
def log_ram
  logger.warn 'RAM USAGE: ' + `pmap #{Process.pid} | tail -1`[10,40].strip
end

您可能希望加载脚本/控制台并首先尝试使用该语句,以确保它可以在您的盒子上运行.

puts 'RAM USAGE: ' + `pmap #{Process.pid} | tail -1`[10,40].strip

然后只需监控顶部,当请求使您的内存使用量跳跃时,请检查日志.当然,这只有在内存泄漏发生在大跳跃中时才会有所帮助,而不是微小的增量.


在osx上你可以使用vmmap#{Process.pid}

3> Jean..:

内存泄漏是当前ruby实现中的一个问题,关于这个问题的一个好地方是 http://whytheluckystiff.net/articles/theFullyUpturnedBin.html为什么thetheluckystiff网站不再存在但你可以在这里找到原始文章:http:/ /viewsourcecode.org/why/hacking/theFullyUpturnedBin.html

有关长期运行的ruby进程问题的更具体的答案,请参阅 http://zdavatz.wordpress.com/2007/07/18/heap-fragmentation-in-a-long-running-ruby-process/

也许你可以试试乘客(mod_rails)http://nubyonrails.com/articles/ask-your-doctor-about-mod_rails



4> Vetal4eg..:

你应该看看ruby-prof.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有