Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rubyのワーカープロセスが終了してしまう #11

Open
masatec opened this issue Nov 20, 2012 · 6 comments
Open

rubyのワーカープロセスが終了してしまう #11

masatec opened this issue Nov 20, 2012 · 6 comments

Comments

@masatec
Copy link

masatec commented Nov 20, 2012

お世話になっております。

10のIssueの取り込み版でAzure上で動作(ホワイトペーパーのhelloアプリ)させたところ、

やはり最終リクエストの30分程度後のリクエストでrubyのワーカープロセスが終了してしまいます。

10のときと同様に

rack/handler/ennoumu.rb の l.58 rescue Interrupt の部分にデバッグプリントを挿入して
手動で rackup を実行してみたのですが、デバッグプリントに制御が到達しなかったため、
別の原因と考えます。
(ennou.cのwait_io関数にデバッグを入れて実行してみたのですが、statは
WAIT_TIMEOUTとWAIT_OBJECT_0のみのように見えます)
#Azure上のみ発生し、ローカルでは発生しません

知識不足で恐縮ですが、発生し得るケースに心当たりがあればご教示ください。

@arton
Copy link
Owner

arton commented Nov 28, 2012

現時点で見当がつかないのですが、30分という時間がSQL Azureの自動切断時間と同じことから、何かのタイムアウト設定に引っかかっているということはないでしょうか?
こちらからの質問ですみません。

@masatec
Copy link
Author

masatec commented Nov 29, 2012

何かのタイムアウト設定に引っかかっている可能性が高いと思い調査を行っていますが、
現状特定できておりません。ただ、30分の閾値についてですが、20分強でもプロセスが
終了することが多いため、SQL Azureの自動切断ではないと考えていました。

20分前後が閾値となるタイムアウト設定がないか調査を行っています。
http.sysのidle timeoutの規定値は20分で設定値を超えた場合にはWorker Processが
終了されるといった記事をみかけたのですが、そのあたりは関係ないのでしょうか?
(このあたりの知識がなく、見当違いでしたら申し訳ありません。これが原因だとすると
ローカル環境でも再現しそうなので違うかもしれませんが。。。)
頂いたご質問に明確な回答ができないまま、質問をしてしまい申し訳ありません。

@arton
Copy link
Owner

arton commented Nov 29, 2012

確かに、IISには20分というプロセスプールの設定がありますね。http://technet.microsoft.com/ja-jp/library/cc771956(v=WS.10).aspx
ただ、Http.Sysを使うIIS以外のアプリケーションが影響されるとは考えにくいです(IIS管理ツールから指定できると思えないので)。また、Http.SysにHTTP_TIMEOUT_LIMIT_INFO(ennou経由で設定可能)という構造体を利用して各種タイムアウトを設定できるAPIがありますが、この中にはプロセスのアイドルタイムアウトを設定できる項目はありません。なので、Http.Sysがタイムアウトを検出して何かしているというのも想像し難いです。
その時に、Windowsのシステムログに何か情報は書き込まれていないでしょうか? Http.Sysが~でプロセスID~を削除したというようなものです。あるいは、Ruby(Rails)のログ(コンソール出力のリダイレクトでも良いですが、プロセス消失のあたりでスタックトレールが吐かれたりはしていないでしょうか。
現時点では、申し訳ありませんが、対症療法として10分ごとにプロセス数分、127.0.0.1へリクストを送るRubyスクリプトを定期的に実行するといった方法しか考え付きません。

@masatec
Copy link
Author

masatec commented Dec 7, 2012

アイドルタイムアウトの件は了解いたしました。

ログについては、少なくともRailsのログには何も情報は書き込まれていません。
Windowsのシステムログについては、これから調査予定です。

まずは、上記対症療法でしのぎたいと思います。
お手数ですが、何か追加情報がありましたら、ご教示いただきたくよろしくお願いいたします。

@masatec
Copy link
Author

masatec commented Dec 18, 2012

Windows Logs(Application)を確認したところ、プロセス終了時、以下のログが出力されていました。

Faulting application name: ruby.exe, version: 1.9.3.286, time stamp: 0x508aa54a
Faulting module name: ntdll.dll, version: 6.1.7601.17696, time stamp: 0x4e8147f0
Exception code: 0xc00000fd
Fault offset: 0x00000000000d0b39
Faulting process id: 0xd50
Faulting application start time: 0x01cddd1817216625
Faulting application path: C:\NougakuDoCompanion\Runtime\Working\NougakuDo\bin\ruby.exe
Faulting module path: D:\Windows\SYSTEM32\ntdll.dll
Report Id: dcf80a15-4911-11e2-80a6-00155d38521c

尚、Event IDは1000となっており、調べてみたところ、メモリアクセス違反のようなものであるらしく、
直接的な問題箇所の特定につながるものではなさそうです。

お手数ですが、何か追加情報がありましたら、ご教示いただきたくよろしくお願いいたします。

@arton
Copy link
Owner

arton commented Dec 18, 2012

ログの確認ありがとうございます。
Exception code: 0xc00000fd が、スタックオーバーフローだということはわかるのですが(したがって、ntdllはたまたまスタックが尽きたときに呼ばれているだけ)、それ以上はわかりません。
coreが欲しいですが、Windowsは残さないはずなので辛いですね。
一応、再現するかどうか放置モードで調べてみます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants