【问题标题】:Elastic Beanstalk Ruby processes consuming CPUElastic Beanstalk Ruby 进程消耗 CPU
【发布时间】:2015-02-05 14:37:37
【问题描述】:

我已经在 Elastic Beanstalk 上部署了一个 Rails 3 应用程序近 2 年了。在大多数情况下,我没有任何问题。但是,我最近升级到了他们的新 Ruby 配置之一(运行 Ruby 2.1(Passenger Standalone)的 64 位 Amazon Linux 2014.09 v1.0.9),并且我一直在解决一个问题,即多个 Ruby 进程之一将消耗 CPU -到我的网站变得无响应的地步。我使用的是单个 m3.medium 实例,但后来我转移到了 m3.large,这只会为我赢得一些时间来手动登录 EC2 实例并终止失控进程。我会说这种情况每天发生一两次。

在迁移到新的 Ruby 配置时,我唯一遇到的问题是我必须将以下内容添加到我的 .ebextensions 文件夹中,以便 Nokogiri 可以安装(w/bundle install)...

commands:
  build_nokogiri:
    command: "bundle config build.nokogiri --use-system-libraries"

我认为这不会导致这些挂起过程,但我可能是错的。我也不想排除与 Elastic Beanstalk 升级无关的事情,但我不能考虑任何其他会导致此问题的重大更改。我意识到这不是很多信息,但是有没有人经历过类似的事情?有人对追踪这些过程的根本原因有什么建议吗?

提前致谢!

【问题讨论】:

    标签: ruby-on-rails ruby amazon-web-services amazon-ec2 amazon-elastic-beanstalk


    【解决方案1】:

    我能够通过 SSH 连接到我的 EC2 实例并安装/运行 gdb 来解决我失控的 Ruby 进程问题。这是一个链接 - http://isotope11.com/blog/getting-a-ruby-backtrace-from-gnu-debugger 我遵循的步骤。我之前确实必须 sudo yum install gdb。

    gdb 在我的一段代码中发现了一个无限循环,该代码在日期范围内循环了几天。

    【讨论】:

      【解决方案2】:

      既然你升级了 beanstalk 配置,我猜你也升级了 Ruby/Rails 版本。这增加了所有 gem 版本。性能问题可能源于这些更改之一(而不是硬件更改)。
      因此,这将我们带入了 RoR 性能故障排除领域:
      1. 检查 beanstalk 日志是否有错误。如果幸运的话,您会通过这种方式发现配置问题。给它一个小时。 2. 假设一切顺利,尝试在您的本地主机上设置完全相同的版本(乘客 + ruby​​ 2.1 + gems 版本)。如果幸运的话,您将见证同样的缓慢并能够进行调试。
      3. 如果您想直接进行生产调试,我建议您安装 newrelic(或任何其他应用程序监控工具),然后在他们的仪表板中深入了解缓慢的细节。我发现它非常有用。

      【讨论】:

      • 感谢您的反馈,塔尔。我今天早上发现了这篇文章 - blog.newrelic.com/2013/04/29/…。下次我 SSH 进入并查看挂起进程时,我将尝试 gdb。
      猜你喜欢
      • 2010-10-12
      • 1970-01-01
      • 2011-02-05
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      相关资源
      最近更新 更多