Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么ruby中的内存评测如此困难?_Ruby On Rails_Ruby_Memory Leaks - Fatal编程技术网

Ruby on rails 为什么ruby中的内存评测如此困难?

Ruby on rails 为什么ruby中的内存评测如此困难?,ruby-on-rails,ruby,memory-leaks,Ruby On Rails,Ruby,Memory Leaks,或者更确切地说,为什么在ruby中没有更好的内存评测工具,特别是rails应用程序 最近,我们的rails应用程序(托管在heroku上)开始在worker dynos中发现大量R14错误。这意味着我们的内存不足。将dynos增加到2x(512mb->1GB)只能暂时缓解问题,这让我相信某处存在内存泄漏。当然,我的下一步是找到一个好的分析宝石,可以帮助我发现泄漏的来源 也许我只是对可用的工具一无所知,或者也许我只是不知道如何使用现有的工具。我的愿望是,我可以安装一个gem,然后运行内存使用统计报

或者更确切地说,为什么在ruby中没有更好的内存评测工具,特别是rails应用程序

最近,我们的rails应用程序(托管在heroku上)开始在worker dynos中发现大量R14错误。这意味着我们的内存不足。将dynos增加到2x(512mb->1GB)只能暂时缓解问题,这让我相信某处存在内存泄漏。当然,我的下一步是找到一个好的分析宝石,可以帮助我发现泄漏的来源

也许我只是对可用的工具一无所知,或者也许我只是不知道如何使用现有的工具。我的愿望是,我可以安装一个gem,然后运行内存使用统计报告。命中端点以获取报告实际上并不可行,因为我的内存问题与运行延迟作业的worker Dyno无关

我看过了,但只有1.8

我已经看过了(很棒),但是内存分析需要一个修补过的ruby intepreter

我已经看过了,但我不明白如何用它来查找内存泄漏


那么,在ruby中查找内存泄漏是不是很困难?或者我不知何故遗漏了要点?

根据您的泄漏类型,您可以对ruby运行valgrind。但可能需要重新编译。一般来说,这很难,因为ruby在默认情况下不触发任何事件就进行方法分配,所以很难跟踪。另请参阅,它在一定程度上解决了这个限制。

我不同意Ruby中的内存评测是困难的。JVM拥有世界上最好的内存分析工具,您可以在JVM上运行Ruby程序。不要重新发明轮子


最近,我在分析web和后台工作者方法,然后寻找优化机会方面取得了一些成功。当你发布这个问题时,它可能不在你身边。缺点是,它只真正帮助您在登台或生产环境中进行调试,而不是在开发环境中进行调试,因此开发循环可能非常慢

如果您使用的是Sidekiq,请确保在web服务器和后台工作人员上同时安装和获取评测


祝你好运

如果您的应用程序运行在使用dtrace或类似技术(如SystemTap)的操作系统上,有一种很好的方法。在我的例子中,我们使用RHEL/CentOS,它具有后者:


您可以轻松地连接到生产应用程序并“注入”分析代码,跟踪调用、内存、CPU时间或I/O,然后随时“断开连接”。它的效率非常高,所以您可能不会注意到任何drastice的减速(除非您将脚本搞糟)。

请检查。谢谢,这看起来对web请求很有用,但我需要一些东西来帮助我分析不在web上下文中运行的worker dynos。据我所知,rack-perftools_profiler不支持这一点。你让它听起来很简单!请开导我。确切地说,在JVM中如何分析ruby应用程序?后续问题:如何使用您的方法分析heroku worker进程?@KevinCantwell:添加了一些JRuby首席开发人员Charles Oliver Nutter的旧博客文章链接。许多Rails应用程序无法在JRuby上一次性运行,许多gems需要C扩展。当然,这一切都是可以解决的,但这个过程并不简单,很耗时,而且当你使用另一个gem时,你可能会错过内存泄漏。调整一个在MRI上运行的相当复杂的rails应用程序,使其与JRuby一起运行,这并不是一件小事。这就是为什么我对这个答案投了反对票。github的好朋友们都在这个领域。我会检查并跟进。