2010年7月4日日曜日

再構築での500エラーを回避する。

Movable Typeをスタティックで構築している場合、何かカスタマイズした後にすべてのエントリーを再構築する場面が多いと思います。

この時、エントリーが多くなってくると再構築時に500エラーが出てしまう事があります。

そしてこの現象の原因として下記が考えられます。


  1. サーバのパフォーマンス低下

  2. サーバのメモリ量不足



大多数の個人ユーザーはレンタルサーバー会社のホスティングサービスを利用しているかと思います。
一つのサーバーを結構な人数でシェアしているわけです。
で、この複数名で共有しているレンタルサーバでは、CPU やメモリ等の事実上のスペックがマシンを占有する人数や使用頻度に反比例して低下していきます。

そのために、サーバーが混んでいるときには再構築の成功率が低下してしまうのです。

この現象を少しでも回避するために、mt-config.cgiの内容を書き換えるのが結構有効な手段です。

mt-config.cgiをエディターで開くと、



# When rebuilding individual archives, Movable Type splits up the rebuilding

# process into segments, where each segment consists of rebuilding N entries.

# The default value for N is 40, so by default, MT will rebuild 40 entries at

# a time, then move on to the next 40, etc. You can change that value globally

# here; for example, if you have a very stable server, you might wish to just

# get it all done with in one batch.

#

# EntriesPerRebuild 40



というところがあります。

どういう事を言っているのかというと、



個々のアーカイブを再構築するとき、Movable Typeはセグメントごとに再構築プロセスを分けます。

このとき、各々のセグメントはN値でエントリを再構築することから成り立っています。

Nのデフォルト値は40なので、デフォルトで、MTはまず最初に40のエントリを再構築し、そして次の40エントリ、さらに次、というプロセスを取ります。

ここの設定でグローバルにN値を変えることができます。

たとえば、非常に安定したサーバーで運営しているのであれば、すべてのエントリを1つのバッチで再構築することもできます。




といった感じの意味の事が書いてあるのです。

つまり、デフォルトではいっぺんに40エントリーずつ再構築する仕様になっているのですが、これではサーバーの負担が大きいために実行できず、500エラーを返されてしまう、という訳です。

これを、10なり、15なり、自分の環境でエラーが出ない値まで下げてやると、結構な確率で500エラーは出なくなります。

上記の

#EntriesPerRebuild 40

のところを

EntriesPerRebuild 10

くらいの値にしてあげるとよいのではないかと。もちろん、20辺りで一度試してみてもいいでしょう。

それにしても、『たとえば、あなたが強力なサーバーを持っているなら、N値を増やしたいと思うでしょう』って言うのは少々・・・な感じもします。


もちろん、これ以外の原因もありますので、絶対500エラーが出なくなる、という訳ではありませんけど、この『N値設定』一度お試しください。



2 件のコメント:

  1. どうしてエラーが出るのか、やっとわかりました。
    早速試してみたところ、20エントリーくらいで落ち着きました。
    ありがとうございます。

    返信削除
  2. > miki さん
    コメントありがとうございます。
    デフォルトでは、40というN値もコメントアウトされていますので、
    まず、コメントアウトをはずしてみて、その後徐々に値を下げていけば良いのではないかと思います。
    もちろん、いきなり10くらいにしてもOKですし、その方がサーバー負荷は低いと思われます。

    返信削除