Elastic Beanstalk Ruby进程消耗CPU

时间:2014-12-08 00:19:25

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

我已经在Elastic Beanstalk上部署了一个Rails 3应用程序近两年了。在大多数情况下,我没有任何问题;然而,我最近升级到他们的一个新的Ruby配置(运行Ruby 2.1(Passenger Standalone)的64位Amazon Linux 2014.09 v1.0.9),并且我已经在一个问题上奋斗了好几天,其中一个或多个Ruby进程会占用CPU - 到我的网站没有响应的程度。我使用的是单个m3.medium实例,但是我已经移动到了m3.large,它只给我一些时间来手动登录EC2实例并终止逃跑进程。我会说这一天发生一次或两次。

我转向新的Ruby配置时唯一遇到的问题是我必须将以下内容添加到我的.ebextensions文件夹中,以便Nokogiri可以安装(带有软件包安装)......

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

我认为这不会导致这些悬挂过程,但我可能错了。我也不想排除与Elastic Beanstalk升级无关的东西,但我不能解决任何导致此问题的其他重大变化。我意识到这不是很多信息,但有没有人经历过类似的事情呢?任何人都有建议将这些过程追溯到根本原因吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

由于您升级了beanstalk配置,我猜您还升级了Ruby / Rails版本。这突破了所有宝石版本。性能问题可能源于其中一个更改(而不是硬件更改) 因此,这将我们带入RoR性能故障排除领域:
1.检查beanstalk日志以查找错误。如果你很幸运,你会发现这种配置问题。给它一个小时。 2.假设一切顺利,请尝试在localhost上设置完全相同的版本(passenger + ruby​​ 2.1 + gems版本)。如果你很幸运,你会看到同样的缓慢并且能够调试 3.如果您想直接进行生产调试,我建议您安装newrelic(或任何其他应用程序监控工具),然后深入了解仪表板中缓慢的细节。我发现它非常有用。

答案 1 :(得分:0)

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

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