[FastCGI] read data timeout in 40 secondsの対処法

Internal Server Errorが出ている

FastCGI (FCGI)を導入してMovableTypeをかなり高速化することができたうちのサーバですが、ときどき

500 Internal Server Error

になることがあります。このときerror_logを見ると、

[Mon Feb 16 12:00:00 2015] [warn] [client xxx.xxx.xxx.xxx] mod_fcgid: read data timeout in 40 seconds, referer: https://www.markn.org/cgi-bin/...

こんなエラーを吐いていました。

どうやら、マシンが遅いせいでいろいろ同時進行させると(たとえば再構築をしながら記事を更新するとか)、40秒以上の処理時間がかかってしまってエラーになるようです。Movable Typeは処理が重いので私の遅いサーバマシンではこの傾向が顕著です。

修正するには

これを修正するには、先日導入したときのhttpd.confを修正します。

<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
SocketPath /tmp/fcgid_sock/
IPCConnectTimeout 20
IPCCommTimeout 300
MaxProcessCount 8
DefaultMaxClassProcessCount 2
TerminationScore 10
SpawnScore 80
IdleTimeout 300
</IfModule>

上記の赤字部分を追加します。これでタイムアウトが40秒ではなくて300秒になったことになります。この対応で上記エラーは出なくなります。さすがに300秒(=5分)以上かかるということはないので。

実は、これでもうちでは500が出なくなった代わりに

503 Service Unavailable

が出ることがあります。

でもまぁこれはマシンが遅いのに(記事のメンテナンス時などに)たくさんのジョブを投入しすぎるのが原因なので、自分が気をつけることで何とかなります。というよりたくさんの記事を同時に更新するなど、無理な負荷をかけるとこのエラーは免れません。

また、基本的に static publishingをしているWebページの表示にはあまり影響はありません。なので、とりあえず放置することにしました。

こちらもよく読まれています