WordPress でカッコヨいいテーマにプラグインをインストールしたりすると、サーバーのメモリ不足に悩まされることになります。普通のデスクトップ同様、サーバー側でスワップアクセスが増えたりするだけでなく、表示そのものが遅くなったり、ブラウザが真っ白のまま肝心のデータがサーバーから送られてこないこともあります。
今回のミッション
- WordPress の表示がトロく、明らかにメモリ不足が生じているケースに速攻対応する!
- WordPress の洒落たテーマを購入したけど、メモリが少ないと叱られるケースに対処する!
WordPressのメモリ不足
デスクトップPCなどをよく触る人には、パソコンのメモリが不足するとどうなるかは肌感覚でわかります。サーバーはデスクトップパソコンの特別あつらえマシンみたいなものですので、メモリ不足が生じれば、デスクトップ同様動作がもっさりします。
サーバー(仮想サーバー)そのものにメメモリ不足が生じている場合は、結論から言えばマシンをハードウェア的にアップグレードするか、仮想サーバーの契約を変更してアップグレードするしかまともな解消法はありません。
一方で、サーバで動く一つのアプリケーション(デーモン)にメモリ不足が生じている程度なら、設定変更でうまく解消することが可能です。うまく行かなくても、速攻でなんとか切り抜けることぐらいはできるかもしれません。
今回は、ワードプレスでメモリ不足ぎみになったときの対処法です。
まずは、以下のことを試してみましょう。
WordPressのディレクトリを確認
WordPress を自分でダウンロードしてインストールした人は、そのディレクトリを確認しましょう。普通は解凍したディレクトリがそのまま、WordPressのディレクトリになっている人が多いようです。
一般的なレンタルサーバーの場合は、public_html
ディレクトリ以下に wp-includes
というディレクトリがあれば、そのディレクトリ内の default-constants.php
と、/wp-config.php
が今回書き換える設定ファイルです。
一般的なapacheサーバの場合「public_html/wp-includes/default-constants.php
」かユーザーディレクトリ以下「user***/public_html/wp-includes/default-constants.php
」になると思います。
当サイト御用達のエックスサーバーの場合は「ドメイン名/public_html/wp-includes/default-constants.php
」となっています。
WordPress のメモリ上限を設定する
WordPress ではメモリ上限を設定できます。主要なパラメータは2種類です。
- WP_MEMORY_LIMIT
- WP_MAX_MEMORY_LIMIT
WP_MEMORY_LIMIT
WordPress が消費するメモリ上限を設定します。
例えば、Allowed memory size of 134217728 bytes exhausted
などのエラーメッセージが出る場合は、phpに割り当てられたメモリが全部使われて足りませんという意味です。
このような場合は、メモリ上限をわざと上げる設定で対処します。
シングルサイトの場合は40MB(デフォルト)、マルチサイトの場合は64MBとなっていますが、本気のマルチサイトの場合は、256MBほど必要になります。
WP_MAX_MEMORY_LIMIT
WordPressが使用するメモリー上限値で、デフォルトは256M。
通常は管理者タスクのための上限メモリを割当てます。
管理画面で保存せずにプレビュー、その他細かい設定など、管理者タスクはメモリを消費することが多いものです。
そのため、WP_MEMORY_LIMIT
より大きい値を設定しておきます。
512M あたりにしておくと、問題は少ないはずです。
具体的方法
default-constants.php
を書き換える
/wp-includes/default-constants.php
を見てみると以下のよう定義されています。
php
// Define memory limits.
if ( ! defined( 'WP_MEMORY_LIMIT' ) ) {
if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
define( 'WP_MEMORY_LIMIT', $current_limit );
} elseif ( is_multisite() ) {
define( 'WP_MEMORY_LIMIT', '64M' );
} else {
define( 'WP_MEMORY_LIMIT', '40M' );
}
}
if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
} elseif ( -1 === $current_limit_int || $current_limit_int > 268435456 /* = 256M */ ) {
define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
} else {
define( 'WP_MAX_MEMORY_LIMIT', '256M' );
}
}
上のファイルを直接編集して書き換えてもいいのですが、よほど緊急性が無い限り直接編集はやらないほうがいいです。
緊急性というのは、何をやってもメモり不足を解消できない、だから直接、根本のコード書き替えるというクラック的応急処置やむ無しの場合です。
というのも、/wp-includes/default-constants.php
というファイルは、頻繁に行われるWordPressのバージョンアップで更新されるため、そのたびにユーザーが手動で書き換え続けなければなりません。複数サイト運営ともなるとメンドウすぎます。
/wp-config.php
を書き換える
で、長い前置きの後で、何をすれば解消かといえば、/wp-config.php
に以下のコードを付け足すだけです。
この方法が一番まともです。
コントロールパネル等から設定してもいいのですが、直接サーバーから/wp-config.php
をダウンロードして書き換えて、上書きアップロードするなどの原始的方法で対処可能です。
ベテランはサーバーにログインしてviやawkなどで速攻書き換える方法も可能です。初心者は原始的な方法で行きましょう(おすすめ)。尚、念の為/wp-config.php
はバックアップしておきましょう。
ファイルの冒頭(<?php の後に書くこと)に書いておくとうまく動きます。
/wp-config.php
の場合は、WordPressのアップデートでは勝手に書き換えられることはないので、うまく設定できれば、この方法がベストです。
php define('WP_MEMORY_LIMIT', '256M'); define('WP_MAX_MEMORY_LIMIT', '512M'):
ファイルの中身の全体像は以下のようになります。
php <?php /** * WordPress の基本設定 * */ 用し、必ず UTF-8 の BOM なし (UTF-8N) で保存してください。 // ** MySQL 設定 - この情報はホスティング先から入手してください。 ** // /** WordPress のためのデータベース名 */ define('DB_NAME', '*******'); /** MySQL データベースのユーザー名 */ define('DB_USER', '*******'); define('WP_MEMORY_LIMIT', '256M'); define('WP_MAX_MEMORY_LIMIT', '512M'); /**#@+ * 認証用ユニークキー * */ (略) /** Sets up WordPress vars and included files. */ require_once(ABSPATH . 'wp-settings.php');
デザインに凝ったテーマなどの、WordPressのメモリ不足はこの方法で以上の対処できますが、根本的に php の方にメモリ不足の警告が出る場合は、php.ini
の方を編集する必要があります。
そちらの設定も、お急ぎの方は「Cygwin で Apache と PHP を速攻セットアップする」の中頃にメモした設定をご参考ください。
-
Cygwin で apache と PHP を速攻セットアップする
Cygwin を使って Apache を速攻セットアップする手順です。 本ページはこんな方におすすめ Windows 上 ...
続きを見る