如何理解为什么ruby进程阻止100%CPU

时间:2012-11-13 22:52:28

标签: ruby-on-rails ruby passenger

我们有一个很大的rails应用程序,而且几天之后,我们的ruby进程似乎在一个循环中阻塞并吃100%的CPU,直到乘客服务器死于502错误。

你知道找出原因的最佳方法吗?

我尝试过New Relic但它只是表演的东西,我们的错误太多了,无法猜出问题是什么。 (我们每天都有很多请求和很多UTF-8 BSON错误,因为我们使用的是UTF-8网址)

使用:

  • Rails 3.2.6 with Ruby 1.9.2p290
  • Passenger 3.0.13
  • MongoDB 2.0.1 with Mongoid 2.4.11
  • Nginx的
  • FreeBSD 8.2

1 个答案:

答案 0 :(得分:8)

找出红宝石卡在哪里的便捷方法是将gdb附加到正在运行的进程call rb_backtrace()。这会将当前堆栈跟踪打印到stderr,这可能会定向到日志文件。这是我在博客上找到的short walk through。堆栈跟踪应该可以帮助您本地化您的流程所处的位置,并允许您通过代码检查或在关键代码路径周围添加日志记录工具来确定正在发生的事情。

Aman Gupta有一个gdb到ruby hooks库gdb.rb我有时候发现它很方便。