WordPressがメモリを浪費するので使用量を表示するプラグインを作った

※記事内に商品プロモーションを含む場合があります

最近、WordPressのようすがちょっとおかしいんだが。

WordPressがメモリを浪費するので先日サーバも落ちました。
【関連】WordPressがメモリを使い果たしてサーバが落ちてました

いじって楽しむブログではWP Super Cacheでキャッシュしているので
キャッシュされたページはPHPを介さずに表示されるので高速です。

キャッシュが存在しない場合PHPで処理されページが表示されます。

複数のキャッシュの無いアクセスがあった場合複数PHPコードが
処理されますがワードプレスが使用するメモリとプロセスが多いとメモリを
消費します。

多いプロセスでは80MB程、apacheのプロセス数は40程。
単純に計算すると3200MB、3.2GBと物理メモリの量を超えています。

プロセス数はアクセスがある程度有ればしょうがないので
メモリを節約する為にどれぐらいメモリを使っているのか調べるプラグイン
を作りました。

ワードプレスのメモリ使用量を表示するプラグインを作った

詳しくはワードプレスで画面を表示する時に使ったメモリの最大値
を知る事が出来ます。

元々は、functions.phpに書くコードでしたが
functions.phpに書くとテーマ変更の時に消えてしまいます。

またfunctions.phpに追加する形なので管理が面倒なので
プラグインに変更してインストールしました。

必要無い時は管理画面から機能をOFFにできますし
本当に要らないなら削除も簡単です。

元のコード(ソース)はこちら
[閉] PHPのmemory_limit (3 件の投稿)

このままだとブログに来た人まで表示されてしまうので
ログインした状態の人だけに表示する用に変更しました。

簡単なコードなのでバージョンアップはしないと思います。
バージョン管理も適当です。

コード

<?php
/*
Plugin Name: wp-memory-checker
Plugin URI: https://b.eax.jp/wp/12338/
Description: メモリの使用量を表示するプラグイン from https://ja.forums.wordpress.org/topic/5785
Author: eaxjp
Version: 0.1
Author URI: https://b.eax.jp/
License: GPLv2
Text Domain: test1
Domain Path: /languages

2015/06/12
ソース:https://ja.forums.wordpress.org/topic/5785

*/

function memory_peak_usage() {
if (is_user_logged_in()) {
echo “<div style=\”text-align: center\”> memory peak usage: ” . round(memory_get_peak_usage() / 1024 / 1024, 2) . “MB</div>\n”;
}
}
add_action(‘wp_footer’,’memory_peak_usage’);
add_action(‘admin_footer’,’memory_peak_usage’);
?>

インストール&使い方

上のコード、緑色の部分をコピーしてサクラエディタなどで保存。
ファイル名をwp-memory-checker.phpとします。

次にwp-memory-checkerと言うフォルダを作って
wp-memory-checker.phpを移動させます。

wp-memory-checkerフォルダをFTPなどで
/wp-content/plugins/にアップロードします。

アップロード後管理画面からプラグインを開くと
wp-memory-checkerと言う名前で表示されるハズ。
有効化すればログイン時のページ下にメモリ使用量が表示されます。

こんな感じにフッターの下にメモリ使用量が表示されます。

wp-memory-checkerを使ってワードプレスのメモリ使用量をチェック

メモリ消費の激しいプラグインの停止

プラグインを有効化した状態と無効にした状態でページを表示させ
メモリ使用量の差を比較しました。

10MB以上の差があった2つのプラグインを停止しました。

  1. JetPack
  2. NextScripts: Social Networks Auto-Poster

JetPackは多機能ですがメモリをバカ食いします。
4~5個しか機能を有効化してませんが10MBぐらいは消費します。

カテゴリページで表示している人気記事はWordPress Popular Posts
を代替に使用しました。

WordPress Popular Postsはそんなにメモリを消費しない印象です。

NextScripts: Social Networks Auto-Posterはアイキャッチ付きで
ツィート出来るので便利ですが、当面は記事公開する時のみ
有効化しようと思います。

ゆくゆくはTwitter、Facebook、Google+に投稿出来るプラグインか
スクリプトを自作したいです。

あとがき

やっぱりWordPress、メモリリークしていると思う。

MaxRequestsPerChildをデフォルトの10000にしているとApacheがメモリ
を消費して、スワップまで消費する事があったので現在は50にしています。

MaxRequestsPerChildは指定の回数プロセスを使い回したら
プロセスを終了させる項目です、0にすれば無制限にプロセスを使い回します。