2012-11-13 13 views
7

私たちは大きなレールアプリを持っており、数日から1つずつルビープロセスがループでブロックされ、乗客までCPUの100%を食べているようですサーバは502のエラーを発生させます。ルビープロセスブロックが100%CPUである理由を理解する方法

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

私はNew Relicを試しましたが、それはパフォーマンスだけです。私たちのエラーは、何が問題なのかを推測しようとするにはあまりにも多くあります。

  • Railsのルビー1.9.2p290と3.2.6
  • :使用

    (私たちはUTF-8のURLを使用しているので、我々は、要求の多い1日とUTF-8 BSONエラーの多くを持っています) Mongoidと旅客3.0.13

  • のMongoDB 2.0.1 2.4.11
  • nginxの
  • はFreeBSD 8.2

答えて

8

あなたのルビーがどこに行き詰まっているかを調べる便利な方法は、実行中のプロセスにgdbcall rb_backtrace()を添付することです。これは現在のスタックトレースをstderrに出力します。stderrはおそらくログファイルに送られます。ここには私がブログで見つけたshort walk throughがあります。スタックトレースは、プロセスが停止している場所をローカライズし、コードの検査や重要なコードパスの周囲にロギングツールを追加することで何が起きているのかを把握するのに役立ちます。

Aman Guptaにはgdb to ruby​​フックライブラリがありますgdb.rb私は時々便利です。

+0

wahoo、私が探していたもの、感謝! – Hartator

関連する問題