説明
次のようなエラーログを見たことはありますか ?
PHP Fatal error: Allowed memory size of xxxxxx bytes exhausted (tried to allocate xxx bytes) in /var/www/wordpress/wp-includes/wp-db.php on line 2007
これはつまり、データベースからデータを取得することで PHP メモリー上限 を超えてしまったことを意味します。多くの場合、サイトが大量のデータを持っており、凄まじい量のループを行なっているときにこのケースが発生します。
しかし、私たちが知りたいのは、どのプラグインがデータを取得しているのか?です。
葉隠は wp-db.php
がメモリー上限エラーを引き起こすと、追加の情報を error.log ファイルに追加します:
[08-May-2019 10:28:37 UTC] wpdb Error Backtrace: #1 Kunoichi\Hagakure\DbLogger->filter_query() /app/public/wp-includes/class-wp-hook.php Line 286 #2 WP_Hook->apply_filters() /app/public/wp-includes/plugin.php Line 208 #3 apply_filters /app/public/wp-includes/wp-db.php Line 1871 #4 wpdb->query() /app/public/wp-includes/wp-db.php Line 2579 #5 wpdb->get_results() /app/public/wp-includes/class-wp-query.php Line 2979 #6 WP_Query->get_posts() /app/public/wp-includes/class-wp-query.php Line 3387 #7 WP_Query->query() /app/public/wp-includes/post.php Line 1961 #8 get_posts /app/public/wp-content/plugins/hagakure/hagakure.php Line 34 #9 {closure} /app/public/wp-includes/class-wp-hook.php Line 286 #10 WP_Hook->apply_filters() /app/public/wp-includes/class-wp-hook.php Line 310 #11 WP_Hook->do_action() /app/public/wp-includes/plugin.php Line 465 #12 do_action /app/public/wp-includes/template-loader.php Line 13 #13 require_once /app/public/wp-blog-header.php Line 19 #14 require /app/public/index.php Line 17 #15 URI: /?p=1
このログは wp-db.php
によって引き起こされるメモリー制限の致命的なエラーが必ず後に続きます。これで #8
が get_posts
を繰り返し呼び出していることが判明します。
CloudWatch Logs のような通知サービスを利用してログを監視することをオススメします。
この類のエラーは本番環境で起こることが多く、しかもそれを目にすることはあまりありません。
私たちは葉隠を自分たちのホスティングサービスで利用していますので、実装の詳細に触れたブログが公開されるのを楽しみにしてください !
このプラグインはまた、エラーログにデバッグ・バックトレースを追加します。バックトレースするエラーレベルを変更したい場合は、wp-config.php
その他に定数を定義してください。
define( 'HAGAKURE_ERROR_LEVEL', E_NOTICE | E_USER_WARNING | E_WARNING | E_USER_ERROR );
それに加え、 SAVEQUERIES
が true
になっている場合、スロークエリログにデバッグ・バックトレースが追加されます。デバッグがはかどります。
謝辞
ダミーコンテンツの元になった文章はチャールズ・ディケンズの “Three Ghost Story” です。テキストファイルは Project Gutenberg にあったものを少し修正しました。
インストール
hagakure
フォルダーを/wp-content/plugins
ディレクトリーにアップロードしてください。- WordPress の “プラグイン” メニューから有効化してください。
- 以上です。このプラグインはバックグラウンドで動作します。
FAQ
-
どうやったら貢献できますか?
-
このプラグインは GitHub kuno1/hagakure にホストされています。気軽にプルリクエストを送ったり、イシューを立てたりしてください。
評価
貢献者と開発者
葉隠 – Yet Another Error Reporter はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。
貢献者変更履歴
1.3.1
- PHPとWordPressの必須バージョンを上げる。
- メモリーリミットのエラーログに関するロジックを変更。
- 所有権をクノイチ株式会社からタロスカイ株式会社に移しました。タロスカイはクノイチの親会社です。開発者は同じです ☺️
1.2.0
- スロークエリがバックトレース付きで保存されるように。
1.1.0
- バックトレースに現在のURIを追加
1.0.0
- Warning と Notice の詳細を扱えるよう変更。
0.8.0
- 最初のリリース。