1 | 全て読む

2007年3月14日(水) 先勝

●【覚え書き】3.2-ja-2/サーバーの負荷軽減・まとめ(07/3/14版)

サーバーの負荷の軽減について、思いつく事と対策

【アーカイブ関係】
不要なアーカイブファイルを作製しない/対策済み
……日別アーカイブ、月別アーカイブ、週間アーカイブ、カテゴリー別アーカイブ、そして個別アーカイブの全てが必要な訳じゃない。
 (このブログでは、個別アーカイブとカテゴリーアーカイブのみ作成)

カテゴリーを細分化し、カテゴリーアーカイブの肥大化を防ぐ
……カテゴリーアーカイブは分割再構築できないため、再構築時のタイムエラーを招きやすい

【テンプレート関係】
テンプレートのモジュール可(要PHP可)/対策済み
……各テンプレートで共通の部分は、モジュール可して読み込ませるようにする。
 私のブログでは、ファイルが大きくなるすぎたカテゴリーアーカイブの再構築時にエラーが出るようになりましたが、本文(EntryBody)までモジュール可させてみたところ、エラーを回避できるようになりました。

負荷のかかるタグを使用しない/対策済み
……「MTCalendar」「MTArchiveList」「MTInclude(→テンプレートのモジュール可」)」など。
※注)私だけかもしれませんが、ファイルが肥大化しているカテゴリーアーカイブで旧暦表示プラグイン用のタグを使用すると、高確率でエラーが出るようになりました。
 →日付からエントリー本文・追記までを、モジュール化(EntryBodyのモジュール化)させて回避。

テンプレート/インデックスの「自動で再構築」 にチェックを入れるテンプレートの数を減らす。/対策済み
……「スタイルシート」は、スタイルシートを変更した時まみ再構築すればいいので、「自動で再構築」のチェックを外す。

【再構築関係】
再構築を分割させる、必要なエントリのみを再構築する(「rebuild支援ツール for MovableType」の使用)/未使用
……注)MT3.2においては、個別エントリーの分割再構築のみ可能。
 (カテゴリーと月刊アーカイブにおいてはエラーとなる)

SmartRebuild(カテゴリーアーカイブ分割再構築プラグイン)/使用中
……カテゴリーアーカイブ分割再構築
 注) 再構築エラー回避の試行錯誤において。カテゴリーアーカイブが分割再構築されないとの記述があったが、私の環境では分割成功。

再構築時のエントリ数を減らす/「mt-config.cgi」の書き換え/対策済み
……「#EntriesPerRebuild 40 」の"#"をとり、数字を10〜20などに減らす。
 (30〜40では、今のサーバーでエラーが出たが、20ならOKだった)
→ リビルドの回数は増えるが、一度に行う処理の量が減るので、タイムアウト等のエラーが出にくくなる。
ただし、カテゴリーアースイブは分割再構築できないので、カテゴリーを細分化する、SmartRebuildプラグインの使用などの工夫が必要な場合もあり。

再構築時のエントリ数を減らす/「lib/MT/App/CMS.pm」の書き換え(6152付近)/対策済み
……「Weekly => 5,」 →「Weekly => 2,」
「Monthly => 10,」 →「Monthly => 2,」
「Dynamic => 5,」 →「Dynamic => 2,」 など
 (MovableTypeで再構築にコケる)

月別アーカイブ、カテゴリーアーカイブ等の分割表示(プラグイン「MTPaginate.pl」の使用)/対策済み
……注)表示させる際に分割表示ができるが、ファイル自体が分割されるわけではないので、再構築時の負荷は変化なし

【その他】
データーベースは「Berkeley DB」ではなく「MySQL」を使う。/対策済み
……再構築を繰り返すたびにfileinfo.dbが肥大化するらしい。
ただし、ロリポップにおいて「MySQLにすると一時的に解消するようですがエントリー記事が200以上になるとやはり再構築時に読み込みエラー(500エラー)が起きる」という事もあるようです。
(【重要】MT3.2-ja-2の再構築エラーの対処法)
 データベースを変更するだけではなく、併せて上記ま対策を行うのが可という事で。


2006年9月24日(日) 仏滅

●EntryBodyのモジュール化

(この記事は、06/09/24に日記に書いた内容を、07/03/11にこのブログに転載しました)

 「MTPaginate」関連の問題は解決でOKだと思う。

 問題は、「和風日付プラグイン」と「六曜プラグイン」。
 結構負荷がかかるのか、「MTPaginate」解決後は「MTDateHeader」で標準の日付タグを使えばエラーにならない事が判明。
 実際、このプラグインにこだわるような問題はないので、使わなきゃいいだけの事なんだけど、それって何かに負けたような気がして、帰って使い続けたくなる(笑)

 色々検索しているうちに、前々から考えていて実行できずにいた方法「EntryBodyのモジュール化」について、わかりやすいブログを見つけ、参考にする。
 Daryl's HomePage / MTEntryBody記事のモジュール化
 

1.アーカイブを新規作成。「EntryBody」と命名。
 参考サイトでは、内容の第一行目に「#!/usr/local/bin/php」となっているが、PHP化しているので、不要。
 内容は「<$MTEntryBody$>」のみ。

 2.ウェブログの設定-アーカイブの設定において、個別エントリのテンプレートにEntryBodyを追加する(優先順位は変えない)
 
 3.追加されたEntryBodyテンプレートの出力ファイル名を下記のように設定。
 「<$MTArchiveDate format="%Y/%m/%d/%H%M"$>_body.php」
 (参考サイトでは拡張子がcgiになっているけど、自分とこではPHPに変更)

 4.カテゴリーアーカイブテンプレート内の<$MTEntryBody$>の部分を、「<? include"/weblogのディレクトリ/archives/<$MTArchiveDate format="%Y/%m/%d/%H%M"$>_body.php";?>」に書き換える。
 (参考サイトでは拡張子がcgiになっているけど、自分とこではPHPに変更)

 5.エントリー・アーカイブとカテゴリアーカイブを再構築

 この方法で、深夜帯で「和風日付プラグイン」を使用してもタイムアウトにならなくなりました。
 けど、「六曜プラグイン」を使うとタイムアウト確定。
 そんな訳で、<MTDateHeader>から<MTEntryIfExtended>まで、まとめて<$MTEntryBody$>と一緒にモジュール化。
 目に見えて、カテゴリアーカイブの再構築が早くなって、一件落着しました♪


2006年9月23日(土)秋分の日 先負

●サーバーの不可を軽減させる

(この記事は、06/09/23に日記に書いた内容を、07/03/11にこのブログに転載しました)

 サーバーの移転も考慮しつつ、もう少し努力しようと、エラーになってしまう、カテゴリーアーカイブのテンプレを数ヶ月ぶりにいじってみました。
 あれこれやって、エラーの原因が少しずつ見えてきたような……。

 1.六曜プラグイン
……そういえば、以前いじった時も、これが原因くさいな〜と思ったんだたった。
 他のテンプレでは問題ないのに、なぜかカテゴリーアーカイブでは、エラーの原因に……。
 配布元に3.3用に最新版があったので、とりあえず突っ込んでみたら、「MTDateHeader」とページ分割化のタグ「MTPaginate」にエラーが出た。
 (古いヴァージョンに戻したら、大丈夫だった)
 で、ふと思い出したのが、3.15をインストした時に、「六曜プラグイン」と「和風日付プラグイン」が表示されなかったり、文字化けしたり……という事があった事。
 「和風日付プラグイン」は配布元のUTF-8版を使うことで問題が解消されたのだけど、「六曜プラグイン」はUTF-8版がなかったので、「文字化けする漢字(六曜の部分)のみを実体参照に置き換えたという記録がみつかった。
 このあたりが原因なのかもしれない。
【補足:】このタグを使用し、カテゴリアーカイブの再構築を行うとタイムアウトエラーが出、使用しない場合はエラーとならなかった。
 結果的に、EntryBodyをモジュール化させる事で、解決。

 2.和風日付プラグイン
……エラーにならない事もあるけど、時々怪しく思う事が。
【補足:】あまり関係なさそう。

 3.ページ分割化のタグ「MTPaginate」
……これも、エラーにならない時もあるけど、時々怪しい。
【補足:】不可とは無関係だが、「perlのヴァージョンにより問題あり」との記述発見。
 詳しくは、下記参照

 4.newアイコンを表示させるタグ
……これも、エラーにならない時もあるけど、時々怪しい。
【補足:】 これは無関係

 今現在は、六曜プラグインをはずす事でエラーを回避できているけど、負荷が大きくなるであろう深夜帯での再構築を試してみたい。
 とりあえず、「MTDateHeader」内のタグと「MTPaginate」に大きな原因があるっぽいところまでは絞れたかな。

************************

【追加】
「MTPaginate」について調べてみた。
 一部で、MTPaginateプラグインを突っ込んだらエラーが出るようになったとの表記をいくつか見かけた。
 perlのヴァージョンの問題で、

24行目の「our $VERSION = '1.24';」を「my $VERSION = '1.24';」に書き換えることで回避可能

との事。
 「Webサーバーのperlのバージョンが5.6未満」の場合に有効らしい。
 調べてみたら、使用している鯖のperlは、「5.008」。
 こいつも原因の一つと確定。
 上記のように書き換えて、テンプレに六曜表示タグを書き加えて再構築をしてみると、いつも表示されていたエラーメッセージは表示されなくなった。


2006年5月23日(火) 大安

●【覚え書き】カテゴリー・アーカイブの再構築エラー

 データベースをMySQLに変更した後も、再構築を行うとエラーになる事が多々あります。
 3.1xまで対応だったDr.Blogさんのテンプレから、3.2対応の小粋空間さんのテンプレに変更してからは、目立ったエラーは出なくなったのですが、カテゴリー・アーカイブの再構築だけは、高確率でエラーとなってしまうのです。
 私がレンタルしている有料の共用サーバー( FAS-NET)では、会員の設置しているブログ(Movable TypeやSB)へのコメントスパムによる負荷によるサーバーダウンが頻繁におこっており、そのため厳しいメモリ制限が行われている事も、再構築のエラーの原因になっているのてしょう。
 (それもあって、DBをMySQLに変更したのですが……)

 以下は、これまでに行った、再構築のエラー解消の対策です。
 (再構築のエラー解消のためではないけど、やった事がエラーの解消対策になっている事も含みます)


  1. php化とパーツのモジュール化

  2. データベースの変更(BerkeleyDB→MySQL)

  3. 「mt/mt-config.cgi」の書き換え
    ……# EntriesPerRebuild 40 → EntriesPerRebuild 10

  4. 「mt/lib/MT/App/CMS.pm」(6152付近)の書き換え
    (【参考】 つれづれ日記: 再構築にイライラ [NS] MovableTypeで再構築にコケる)
    Individual => 1,
    Daily => 2,
    Weekly => 5,
    Monthly => 10,
    Dynamic => 5,

    Individual => 1,
    Daily => 2,
    Weekly => 2,
    Monthly => 2,
    Dynamic => 2,
    ……これって、カテゴリーアーカイブの設定はできないのね(泣)

  5. rebuild支援ツールは、2.661や3.15で導入した事があったけど、3.2ではカテゴリーの再構築と月別アーカイブの再構築でエラーになるらしいので、ダメ。

      小粋空間:さんの 3.2-ja 再構築時のパフォーマンスさんによると

    まとめると、3.2では新規インストール・アップグレードにかかわらず、インデックステンプレート/アーカイブテンプレートに「最近のコメント(recently_commented_onオプションあり)」「サブカテゴリーリスト」等のメニューを設置している場合、500エラーが発生する可能性があります。

     との事で、もう仕方がないって事なのかなぁ〜。
      小粋空間:さんの別エントリー・Movable Type で再構築エラーになる場合の原因と対処に、具体的な対処方法が記載されていましたので、参考にさせて頂いて、もう少し何とかしようと思います。
     


2006年5月11日(木) 大安

●データベースをMySQLに変更

 半年以上放置してしまいましたが、なんとか復活できそうです。

 途中、共用鯖の方でスパムが大量にやってきて、頻繁にダウンするようになってしまい、ついに鯖全体でメモリ制限されてしまいました。
 (心配になり、鯖の管理会社に問い合わせましたが、このブログがダウンの原因になっていた訳ではありません)

 その為、DBがBerkeleyのままでは、何をやってもエラーになってしまい、何もできなくなりました。
 MySQLへの変更をしなくてはならなくなったのですが、なかなかできなくて。
 そうこうしているうちに、急遽ブログの更新を迫られる出来事が……。
 家庭菜園資材を販売しているオンラインショップの、「家庭菜園キット」にモニター当選し、野菜の育成をブログで発表しなくてはならなくなりました。
 とっかレンタルのブログでも……とも思いましたが、毎月分の料金も払ってる事だし、いい加減何とかしよう……と、重い腰を上げることになりました。
 なんとか、データベースもMySQLに移行しましたが、再構築でのエラーは解消されず、mt-config.cgiやらmt/lib/MT/App/CMS.pmを書き換え。
 それでも解消されないエラーの原因に、以前使用していたDr.brogさんのテンプレートがありました。
 元々3.2に対応されていないテンプレだった事が原因だったのです。
 そこで、以前からいつか使おう……と思っていた、小粋空間さんのテンプレを使用させて頂くことにしました。
 元々、私はテンプレに色々手を加えていたので、小粋空間さんのテンプレも、自分用にカスタムしなくてはいけなかったので、これもまた大変でした。
 半年以上、MTいじっていなかったから、いろんな事も忘れていましたし(笑)
 とりあえず「なんとか」程度にはなりましたが、相変わらず、完成型ではありません(笑)
 今のテンプレに手を加えて、もっと可愛いor綺麗なブログにしたいなぁ〜と思います。

 とりあえず、
 ・データベースの変更
 ・再構築のエラー解消

 は、近日中(忘れないうちに)記事にしようと思います。


2005年4月4日(月) 先負

●【覚え書き】負荷の軽減

 MovableTypeがサーバにかける負荷は、他のCGIに比べて大きいと聞いています。
 負荷が大きいと、再構築の時に時間もかかりますし、自宅サーバや専用サーバを使用している方ならともかく、私はレンタルの共用サーバを使用しているので、サーバを共用している他の方や会社の方に迷惑をかけないように、できるだけ負荷を減らしたいと思いました。
 (負荷かけすぎると、サーバから追い出される可能性もありますしね・苦笑)
 このブログは記事数はまだ少ないので、そんなに負荷が生じているとは思いませんが、現在作成中の別ブログは日記用で、これまでに書いてきた過去5年分のログも全て移す予定です。
 記事がいくつあるのかは数えていませんが、5年という年月を考えると、相当な記事になります。
 1000は余裕で越えている事でしょう。
 そして、これからも書き続ける事を考えると、再構築にも異常に時間がかかるようになりますし、負荷の軽減は無視できない課題となりました。
 MovableTypeの負荷に関して、色々なブログを拝見して、「なるほどなぁ」と思ったこと等を、自分なりにまとめてみました。

続きを読む
1 | 全て読む