有人能想办法找出我们的 Rails 生产服务器挂在哪里吗?它的 CPU 为 99%,所以我认为它会在 while/for/each 循环中丢失。不幸的是,我们找不到候选循环。
该问题在开发中不会出现,我们的测试套件现在具有 100% 的代码覆盖率。
我们已经通过 gdb 连接到 Ruby,但不知道从那里去哪里。有任何想法吗?
有人能想办法找出我们的 Rails 生产服务器挂在哪里吗?它的 CPU 为 99%,所以我认为它会在 while/for/each 循环中丢失。不幸的是,我们找不到候选循环。
该问题在开发中不会出现,我们的测试套件现在具有 100% 的代码覆盖率。
我们已经通过 gdb 连接到 Ruby,但不知道从那里去哪里。有任何想法吗?
将 gdb 附加到繁忙的循环进程后,然后rb_backtrace
从 gdb 调用:
> call rb_backtrace()
输出rb_backtrace
将类似于崩溃报告,输出将进入您的日志文件,类似于标准 Ruby 错误回溯。
从那里你应该希望已经离解决方案更近了一步,因为你会看到你的 Ruby 代码中的哪个过程卡住了。
您可以在此处查看更多提示:http:
//isotope11.com/blog/getting-a-ruby-backtrace-from-gnu-debugger
这不是一个干净的解决方案,但至少以下解决了我们的问题:我们迁移到“瘦”网络服务器并删除了“设计”。