8

私たちは大きなRailsアプリを持っています.数日以来、ルビープロセスはループでブロックされ、パッセンジャーサーバーが502エラーを発生させるまでCPUの100%を消費しているようです.

その理由を理解するための最良の方法を知っていますか?

New Relic を試してみましたが、パフォーマンスの問題だけで、エラーが多すぎて何が問題なのかを推測できませんでした。(UTF-8 URL を使用しているため、1 日に多くのリクエストがあり、多くの UTF-8 BSON エラーがあります)

使用:

  • Rails 3.2.6 と Ruby 1.9.2p290
  • 乗客 3.0.13
  • MongoDB 2.0.1 と Mongoid 2.4.11
  • ニンクス
  • FreeBSD 8.2
4

1 に答える 1

8

Ruby がスタックしている場所を見つける便利な方法はgdb、実行中のプロセスにアタッチしてcall rb_backtrace(). これにより、現在のスタック トレースが stderr に出力されます。これはおそらくログ ファイルに送信されます。これは、ブログで見つけた短いウォークスルーです。スタック トレースは、プロセスがスタックしている場所を特定するのに役立ち、コード インスペクションを介して、またはクリティカル コード パスの周囲にロギング インストルメンテーションを追加することによって、何が起こっているかを把握できるようにする必要があります。

Aman Gupta には、gdb から ruby​​ へのフック ライブラリgdb.rbがあります。

于 2012-11-13T23:09:12.867 に答える