Perlゼミ

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

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

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

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

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

タイムアウトの仕組み

ハートビート

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

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

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

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

# hypnotoad.conf
{heartbeat_timeout => 60}

Mojoliciousリファレンスへ

Perlプログラミングちゃんねるのご紹介

Perlの書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「今日も元気だ! Perlで元気!」

Perlプログラミングちゃんねる

Youtubeチャンネル登録、いいね、コメント歓迎

Twitter
フォロー、いいね、リツート、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

Perl総合研究所