我已经在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升级无关的东西,但我不能解决任何导致此问题的其他重大变化。我意识到这不是很多信息,但有没有人经历过类似的事情呢?任何人都有建议将这些过程追溯到根本原因吗?
提前致谢!
答案 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在我的代码段中发现了一个无限循环,它在日期范围内循环了几天。