Project

General

Profile

Passenger 暴走

Added by Haru Iida almost 13 years ago

このサイトのPasenger が暴走しCPUとメモリを食いつぶしてしまう現象が多発。いろいろやったが解決しそうもないのでThin に乗り換えた。これで安定するか?

以下の現象と同じだろうか。
http://www.redmine.org/boards/2/topics/6865


Replies (6)

RE: Passenger 暴走 - Added by Haru Iida almost 13 years ago

結局Thinも暴走

RE: Passenger 暴走 - Added by Haru Iida almost 13 years ago

今日もThinが暴走。PassengerやThinの問題ではなくRedmineの問題だろうか。

暴走時のstraceを取ってみた。

何かが無限ループしてるっぽい。

sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
brk(0x2fe55000)                         = 0x2fe55000
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()

RE: Passenger 暴走 - Added by Akiko Takano almost 13 years ago

こんにちは!
フォーラムには初めて書き込みさせていただきます。

私もRedmine0.8.4をテスト環境で使っています。(現在は0.7xを使っていて、そちらのバージョンアップを検討中のため)
バージョンアップにあたって、幾つかプラグインを追加しているので、単純なmigrationでは済まないので、十分チェックしないといけません。

Passengerでの利用は未だ行ったことが無いので、このトピは参考にさせていただこうと思います。

さて、こちらは、mongrel(daemon mode)で動作させているのですが、どうも以下の問題にひっかかるようで、一定時間アクセスしないでいると、プロセスは落ちていないのに、アプリケーションが反応しなくなってしまいました。

[ Rails + MySQL (+ Mongrel?) でDB接続の通信が無い状態が続くとデッドロックする。]
http://d.hatena.ne.jp/koseki2/20070130/railslockup

とりあえず、cronで定期的にトップページをwgetするという安直な回避策をとってみたところ、反応が無くなるということは避けられているようです。

RE: Passenger 暴走 - Added by Haru Iida almost 13 years ago

Akiko Takano wrote:

さて、こちらは、mongrel(daemon mode)で動作させているのですが、どうも以下の問題にひっかかるようで、一定時間アクセスしないでいると、プロセスは落ちていないのに、アプリケーションが反応しなくなってしまいました。

そうなんですか!。そう言われてみると、こちらで暴走する時刻は朝5時とか明け方が多い気がする。同じ原因かもしれませんね。
貴重な情報ありがとうございます。

とりあえず、cronで定期的にトップページをwgetするという安直な回避策をとってみたところ、反応が無くなるということは避けられているようです。

こっちでもやってみます。ちなみにどれぐらいの頻度でwgetを実行してますか?

RE: Passenger 暴走 - Added by Akiko Takano almost 13 years ago

こちらのサイトはインターネットに公開されているので、アクセスが一定時間無い、ということも無いかとは思いますが...。

とりあえず、cronで定期的にトップページをwgetするという安直な回避策をとってみたところ、反応が無くなるということは避けられているようです。

こっちでもやってみます。ちなみにどれぐらいの頻度でwgetを実行してますか?

1時間に1回程度です(^^;

RE: Passenger 暴走 - Added by Haru Iida almost 13 years ago

Akiko Takano wrote:

こちらのサイトはインターネットに公開されているので、アクセスが一定時間無い、ということも無いかとは思いますが...。

さすがに朝5時ぐらいだとめっきりアクセスも少なくなります。このサイト、Thinのインスタンスを3つ立ち上げて負荷分散しているので明け方だと3つのうちどれか一つは全然リクエストが振られないってことがあるかもしれません。

とりあえず、cronで定期的にトップページをwgetするという安直な回避策をとってみたところ、反応が無くなるということは避けられているようです。

こっちでもやってみます。ちなみにどれぐらいの頻度でwgetを実行してますか?

1時間に1回程度です(^^;

Hudsonで1時間に1回wgetを実行するようにしてみました。いい感じみたいです。

http://www.redmine.org/boards/2/topics/6865#message-7157
でも1時間アクセスしなかったら暴走したみたいなコメントがありますね。

    (1-6/6)