私たちのレールプロダクションサーバーがハングアップしている場所を見つける方法を誰か考えてくれませんか? その CPU は 99% であるため、while/for/each ループで失われると思います。残念ながら候補ループが見つかりません。
この問題は開発段階では発生せず、テスト スイートのコード カバレッジは 100% になりました。
すでに gdb 経由で Ruby に接続していましたが、そこからどこへ行くべきかわかりませんでした。何か案は?
私たちのレールプロダクションサーバーがハングアップしている場所を見つける方法を誰か考えてくれませんか? その CPU は 99% であるため、while/for/each ループで失われると思います。残念ながら候補ループが見つかりません。
この問題は開発段階では発生せず、テスト スイートのコード カバレッジは 100% になりました。
すでに gdb 経由で Ruby に接続していましたが、そこからどこへ行くべきかわかりませんでした。何か案は?
ビジー ループ プロセスに gdb をアタッチしたら、gdb から呼び出しrb_backtrace
ます。
> call rb_backtrace()
からの出力rb_backtrace
はクラッシュ レポートに似ており、標準の Ruby エラー バックトレースと同様にログ ファイルに出力されます。
そこから、Ruby コードのどこでプロセスがスタックしているかがわかるので、ソリューションに一歩近づいていることを願っています。
ここでいくつかのヒントを確認できます:
http://isotope11.com/blog/getting-a-ruby-backtrace-from-gnu-debugger
これはクリーンな解決策ではありませんが、少なくとも次の方法で問題を解決しました。「シン」ウェブサーバーに移行し、「デバイス」を削除しました。