2009-03-08 3 views
19

私はmod_railsのrubyインスタンスを "不正"にしています。これらのプロセスは乗客状態ではなく、100%CPUを利用しています。modrails - 100%CPUを消費する不正なルビープロセス

インスタンスを強制終了するためにgod/monitをインストールする以外に、誰も私にこれを防ぐ方法についていくつかアドバイスを与えることができますか?私はログに役立つ何かを見つけることができませんでした。

+0

これは、最初のリクエストでApacheを再起動したときにのみ発生します。アプリケーションが実行している処理が正常に実行されると、正常に実行されます。しかし、それはサイトに来る10分(トラフィックがない)から3~6時間(トラフィック)を取ることができます - これはオプションではありませんが、何が起こっているのか、なぜ起こったのか理解したいです – Spasm

答えて

9

Linuxを使用している場合は、「strace」ユーティリティをインストールして、CPUをすべて消費しているRubyプロセスが何であるかを確認できます。それはあなたに良い低レベルのビューを与えるでしょう。あなたのパッケージマネージャーで利用できるはずです。そして、次のことができます。あなたが途中でプロセスを停止し、スタックトレースをダンプする場合

$ sudo strace -p 22710 
Process 22710 attached - interrupt to quit 
...lots of stuff... 
(press Ctrl+C) 

その後、あなたは特にやって、http://eigenclass.org/hiki.rb?ruby+live+process+introspectionでRubyでGDBを使用してのガイドに従うことができます:

gdb --pid=(ruby process) 
session-ruby 
stdout_redirect 
(in other terminal) tail -f /tmp/ruby_debug.(pid) 
eval "caller" 

あなたもまた面白そうデバッグ旅客インスタンスに関係のGithub上のプロジェクトが、documentatがあるようですhttp://duckpunching.com/passenger-mod_rails-for-development-now-with-debugger

で説明し、リモートであなたが開くデバッグソケットに接続するにはルビー・デバッグ宝石を使用することができますイオンが欠けている: http://github.com/ddollar/socket-debugger/tree/master

+0

リンク誰かがコピーを持っていますか? –

2

非常に長い実行SQLクエリでこれに似たものが見えました。

MySQLはクエリが長時間実行された制限を超え、クエリが死んでいたことをスレッドが認識しないため、クエリを強制終了します。

データベースログを確認することができます。

+0

ログにどのように表示されますか?それ以上の指標は? –

4

Phusion Passengerに関連するルビープロセスがありました。これは、アイドル状態だったはずですが、多くのCPUを消費しました。 this threadで提案されているように、私は

date -s "`date`" 

を実行した後に

問題が去っていきました。

明らかに、問題はうるう秒に関連していて、MySQL、Javaなどの他の多くのアプリケーションに影響する可能性があります。詳細はthis thread on lklmを参照してください。

+0

人生節約に感謝! –

+0

素晴らしいです、ありがとう!誰かがこの男に葉巻を与える! – Joe

関連する問題