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発目の記事」はやはり再構築に時間がかかる。。。問題解決まであと一歩の所まで来たが、何が悪いのか検討が付かない(^_^;
ひとつ前のページで書いた「一度処理待ちが発生すると、そこから延々とレスポンスが悪くなっていく」系統の不具合が発生しているんだろうか?
この件は、ひとまず保留。