MobableType(以下MT)で運営している別館ブログのカテゴリーを少し弄っていたら、500エラー多発で更新できなくなってしまった。

サーバーログを見てみると、単にタイムアウトが発生しているだけっぽい。
今まで5~10秒で再構築出来ていたものが、一気に60秒前後かかるようになったっぽい。
ブログ全体の再構築も、途中でタイムアウト発生。
たった2つほどカテゴリ追加しただけだが、MovbleTypeの処理が一気に時間がかかるようになったらしい。

原因:同名カテゴリーを作ってしまった

MT3までは「基本的に同名のカテゴリーを作る事は出来ない」ってのをすっかり忘れてしまっていた。これが最大の敗因。MT4以降は、子・孫カテゴリにアッサリと同じ名をつける事が出来る。

で、MT3時代と同様の方法でカテゴリー名を拾ってやると、エラーが出たり大量のメモリを消費したり、異様にレスポンスが悪くなったりする。

完全に特定したわけじゃないけれど、恐らく「同じカテゴリー内の記事リスト」を作成する部分で負荷がかかっている or 無駄なループしているんだろう。

具体的にどんなタグでどんな影響が出るか?は、小粋空間さんの ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版・改) あたりが詳しい。

対処方法

結局、カテゴリ名を付け直し。同名カテゴリはやめたら、とりあえずサーバータイムアウトは発生しなくなった。しかしMTのモッサリ感は治らない。 2~3日前までは最新記事を追加更新した時は5~10秒で再構築が終了していたけれど、今は30秒前後かかる。

でも全ページの再構築にかかる時間は、15~20分前後で以前と変わらない。なぜ?

時間がかかる部分は、最初に再構築用にメモリを確保する段階なのか?
しかしサーバーステータスを見てもSWAPは発生していない。リソース余裕ある。
「途中まで同じ名前」にしているので、正規表現の処理に時間がかかっているんだろうか?

う~む。。。 次やる事↓
カテゴリ名の先頭1~2文字は、他カテゴリと被らないように変更する。
(まだ未実施)

解決。しかし不思議な現象が

翌日、MobableTyepの再構築も、新しい記事の更新も、嘘の様に高速化した。
前述の正規表現最適化はまだ行っていない。

ちょっと表にまとめてみる。
日時やった事再構築時間など
いままで新記事追加:5~10秒
全体再構築:15~20分
3/25:15時頃MTにカテゴリを2個追加新記事追加に60秒以上:タイムアウト発生
全体再構築でもタイムアウト
3/25:16時頃カテゴリ名の重複を解消新記事追加に30秒以上
全体再構築は、時々タイムアウト
3/26:2時頃サーバーの空いている時間
を狙ったテスト
新記事追加に30秒以上
全体再構築はタイムアウトしない。30分以上かかった。
3/26:3時頃サーバーの再起動を行った。新記事追加に30秒前後
全体再構築は15~20分に戻った。
3/26:16時頃なにもせず。
通常の更新
新記事追加が一瞬で終了。
全体再構築は15分。ローカルテストと同じ時間で終了。
3/26:16時頃上と同時刻。
問題の出た記事を更新
一度問題の出た記事は再構築に40秒前後
何かデータベースがおかしくなっている?

回線が空いているであろう深夜3時頃にサーバー再起動して再構築テストを行った際、新記事追加で30秒前後かかっていたので、「根本的な見直しが必要か。。。」と思っていた。
しかし一夜明け、そこそこ混雑する16時台に新記事更新した所、今までに無い速度で再構築が完了した。

MTテンプレート・カテゴリ構成の見直しは不要かもしれない。
サーバーログを参照しても、Dos攻撃や不正アクセスの形跡は見られない。
昨日の異様な重さはなんだったんだ。。。

と思ったら、問題の出た「新カテゴリ追加、そこに放り込んだ1発目の記事」はやはり再構築に時間がかかる。。。問題解決まであと一歩の所まで来たが、何が悪いのか検討が付かない(^_^;

ひとつ前のページで書いた「一度処理待ちが発生すると、そこから延々とレスポンスが悪くなっていく」系統の不具合が発生しているんだろうか?

この件は、ひとまず保留。