我们有一个很大的rails应用程序,并且几天之后,我们的
ruby进程似乎在一个循环中阻塞并吃100%的
cpu直到乘客服务器死于
502错误.
你知道解决原因的最佳方法吗?
我尝试过New Relic,但它只是性能的东西,我们的错误太多,无法猜测是什么问题. (我们每天都有很多请求和很多UTF-8 BSON错误,因为我们使用的是UTF-8网址)
使用:
>使用Ruby 1.9.2p290的Rails 3.2.6
>乘客3.0.13
> MongoDB 2.0.1与Mongoid 2.4.11
> Nginx
> FreeBSD 8.2
找到ruby卡在哪里的一种方便
方法是将
gdb
附加到正在运行的进程并
调用rb_backtrace().这会将当前堆栈跟踪打印到stderr,这可能会定向到日志
文件.这是我在
博客上找到的
short walk through.堆栈跟踪应该可以帮助您定位流程停滞的位置,并允许您通过
代码检查或在关键
代码路径周围
添加日志记录工具来确定正在进行的操作.
Aman Gupta有一个gdb到ruby hooks库gdb.rb我有时发现它很方便.