Ruby 生产服务器内存泄漏

Posted

技术标签:

【中文标题】Ruby 生产服务器内存泄漏【英文标题】:Ruby production server memory leak 【发布时间】:2016-01-09 15:52:06 【问题描述】:

我有一个生产 Rails 应用服务器,它的 Rails 工作进程的内存使用量在 3-4 天内从 ~300 MB 增加到 ~1.2GB。

如何调试此内存泄漏。 我正在使用 rvm 2.2.2 并且我的应用程序服务器部署在 AWS:ElasticBeanstalk 中。我正在使用 puma 网络服务器。

请提供详细答案。

【问题讨论】:

您使用的是哪个应用服务器? 我正在使用 puma 服务器。 您是否使用 aws-sdk gem 写入 S3? 是的,AWS 库中是否存在内存泄漏。 ...... gem 'aws-sdk', '~> 2' ....... 【参考方案1】:

我最近在使用 ruby​​ 2.2.2 时遇到了类似的问题。我正在使用 aws-sdk gem 写信给 AWS S3。我在this issue on aws-sdk GitHub找到了解决方案。

ruby 2.2.0 到 2.2.2 附带的 StringIO 类中存在内存泄漏。 aws-sdk 在向 S3 发送文件时使用此类。这个错误是 2.2.3 上的reported and fixed。

希望升级到 ruby​​ 2.2.3 可以解决您的问题。

【讨论】:

嗨 haradwaith,尝试了您提供的 github 链接中提到的这个解决方案。似乎它正在工作,必须监视一天才能确定。 您好,这解决了问题。虽然这个答案没有详细说明 ruby​​ 中的内存泄漏调试,但我接受这个答案,因为我面临的问题已经解决。

以上是关于Ruby 生产服务器内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

ruby/ruby on rails 内存泄漏检测

在 Ruby 中查找内存泄漏的原因

在 Rails 应用程序中查找内存泄漏

一个生产环境C工程内存泄漏问题的排查及重现工程

内存泄漏的java堆和线程分析

使用 Cairo 的 Ruby Gtk3 内存泄漏