hypnotoadサーバーのタイムアウトの問題 / Mojoliciousリファレンス

hypnotoadサーバーはMojoliciousの本番環境でデプロイするために利用されるプリフォークサーバーです。

開発環境でmorboで開発していて、本番環境でアプリケーションを動かすときには、タイムアウトに注意する必要があります。

hypnotoadはプリフォークサーバーで、一定時間応答がない子プロセスを停止させるという仕組みがあります。

ですから30秒以上かかるHTTPリクエストを実行した場合に、実行できないということが発生します。

タイムアウトの仕組み

ハートビート

hynotoadの親プロセスは子プロセスの生存監視をしています。デフォルトでは5秒間応答がないプロセスがあった場合に、その子プロセスに対して、リクエストが終わり次第停止するようにという命令を出します。

さらに30秒以内にリクエストが終わらなかった場合には、強制的にそのプロセスを停止させます。つまりデフォルトでは35秒以上のリクエストを受け取ることができません。

ブロッキングするアプリケーションを書くときはハートビートのタイムアウト値を長く設定する必要があります。

hypnotoadは同じディレクトリにhypnotoad.confというファイルがあると設定ファイルとして読み込んでくれますので、たとえば以下のようにハートビートのタイムアウトを設定をしておきます。

# hypnotoad.conf
{heartbeat_timeout => 60}

Mojoliciousリファレンスへ

Perlテキスト処理のエッセンス
  • 初級者向け・テキスト処理と正規表現の基本をマスター
業務に役立つPerl
  • 実務者向け・ログ解析など日本語を含むテキスト処理の実践!
Perlクラブ
  • 仲間と出会い
    ゆとりあるエンジニアライフを送る