Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl

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

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

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

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

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

タイムアウトの仕組み

ハートビート

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

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

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

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

# hypnotoad.conf
{heartbeat_timeout => 60}

Mojoliciousリファレンスへ

  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。