ブログ記事の更新でエラー発生 その2【CPU時間使用量 10秒の壁】

<2017年12月22日>
共有レンタルサーバ

【粘って解決】


Internal Server Error

 日々積み重ねてきた記事が200を超えた頃からか、ブログ記事の更新を行うと頻繁に"Internal Server Error"が発生するようになりました。
 とりあえずの対応(その1)で、だましだまし使ってきましたがどうもスッキリしません。

 もう少し粘ってみることにします。


ImageDriver

 根気にネット検索していると「サムネイルを作成するImageDriverが負荷をかけている場合がある」という記事を見つけました。

 アップロードした画像のサムネイル生成に必要なものですが、初期状態ではImageMagickライブラリとImage::MagickというPerlモジュールが使われています。



ブログ記事の概要

 Websiteと各ブログのトップページに記事リストを表示するときにサムネイル画像を生成しています。

 ブログ記事の概要テンプレートで「MTAssetThumbnailURL」というタグを使い、記事のURLとLinkさせています。


ImageDriver未設定

 リストでは全部の記事にサムネイルを生成するため、サーバへ相当の負荷がかかっているものと思います。

 試しにConfigファイル設定から一時的にImageMagickを外してみます。
 CMSを作動させると"イメージドライバーが設定されていません。"と表示。


サムネイル消去

 この状態でブログ記事の更新を実行してみると、"ものすごくスムースに再構築"されました。
 やはり「ImageDriver」がサーバにかなりの負荷をかけているようです。

 そうはいっても記事リストにサムネイルがなくなるのはデザイン的にも見栄えが良くありません。



Perlモジュール

 さらにネット検索を続けるとImageDriverの種類に、動作が軽いといわれる「NetPBM」があることを知りました。
 期待を込めてサーバ管理画面のPerlモジュールを閲覧しましたが「NetPBM」はありません。

 そこでレンタルサーバ管理者あてに"NetPBMモジュールをインストールして欲しい"旨の問い合わせをしました。
 返ってきたメールは、"共有レンタルサーバのため、他のお客様へ影響する可能性があるため、個別の導入につきましては対応できかねる。"という回答でした。

 ImageDriverを変更するという方法は、断念せざるを得ません。(ガックリ)
 


エラーログ

 気を取り直して、レンタルサーバ管理画面のエラーログを見ることにします。
 アルファベットの羅列の中で、"File does not exist:   /image"を見つけましたが無視。(多分ImageDriverの関連)

 もう一つは、"Premature end of script headers"。
 「CGIプログラムが適切なHTTPヘッダを出力していない」ということのようです。

 ブログ記事更新時に"Internal Server Error"が出るまでの時間を計ってみると、およそ13秒でした。
 どうも共有サーバに時間制限がかけてあるようです。

 またまたレンタルサーバ管理者に問い合わせてみると、"CPU時間使用量を制限する設定は【10秒】。10秒より上げてしまうとサーバの過負荷が発生する可能性があるため変更できない。 "という回答でした。

 これでギブアップか。
 そうかといって、年老いた田舎のラジオ少年のブログに高額な専用サーバを使う訳にもいきません。


EntriesPerRebuild

 もうちょっと粘って、「10秒」以内にリスト抽出・サムネイル生成が終わるように工夫すればいいんでは、と考え方を変えます。

 1回の再構築で処理する記事の数を指定する「EntriesPerRebuild」という環境変数があることが分かりました。
 デフォルトでは、1回に付き40記事を再構築し、それが終わると次の40記事に取りかかるとあります。

 ということは・・・
 Configファイルで「EntriesPerRebuild 10」を設定します。


モジュール設定

 次に、Websiteの全般設定の中に、"再構築の速度向上のために、テンプレートモジュール毎のキャッシュ設定を有効にする"というのがあるので、チェックを入れます。



Websiteのメインページ

 その1でも行いましたが、記事の抽出関連のテンプレートを再点検します。
 Websiteのメインページは、lastn 999⇒20に変更。



Websiteのブログのメインページ

 次に、Websiteのブログのメインページ。
 全ブログ(12)から新しい記事順にリストアップするメニューですが、その1では全く忘れていました。

 何と言っても全部の記事を抽出しサムネイルを生成する訳なので、サーバ過負荷の大きな要因となっています。
 ここも最新の記事20だけの表示とします。lastn 999⇒20に変更。


各ブログのメインページ

 各ブログの記事数は50以下なので、当面はデフォルトのままとします。


ブログ記事リスト

 これで個人でできる対策は全部講じました。
 さあ、MovableType5の管理画面を起動させ記事の更新を実行します。

 ブログ記事の更新⇒ブログ再構築⇒Website再構築へとスムースに移行。
 記事概要にサムネイルが生成され、トップページの記事リストが出来上がりました。

 見事に"10秒の壁"を超えました。(大げさ?)



 

 
 

コメント(1)

 以前はコメント投稿でもエラーが発生しておりましたが、今回の対策で正常に投稿できるようになりました。
 数少ない読者の皆様、コメントをお待ちしております。
 よろしくお願いします。

コメントする

Gifu. JST: