葉隠 – Yet Another Error Reporter

説明

次のようなエラーログを見たことはありますか ?

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 によって引き起こされるメモリー制限の致命的なエラーが必ず後に続きます。これで #8get_posts を繰り返し呼び出していることが判明します。

CloudWatch Logs のような通知サービスを利用してログを監視することをオススメします。
この類のエラーは本番環境で起こることが多く、しかもそれを目にすることはあまりありません。
私たちは葉隠を自分たちのホスティングサービスで利用していますので、実装の詳細に触れたブログが公開されるのを楽しみにしてください !

このプラグインはまた、エラーログにデバッグ・バックトレースを追加します。バックトレースするエラーレベルを変更したい場合は、wp-config.php その他に定数を定義してください。

define( 'HAGAKURE_ERROR_LEVEL', E_NOTICE | E_USER_WARNING | E_WARNING | E_USER_ERROR );

それに加え、 SAVEQUERIEStrue になっている場合、スロークエリログにデバッグ・バックトレースが追加されます。デバッグがはかどります。

謝辞

ダミーコンテンツの元になった文章はチャールズ・ディケンズの “Three Ghost Story” です。テキストファイルは Project Gutenberg にあったものを少し修正しました。

インストール

  1. hagakure フォルダーを /wp-content/plugins ディレクトリーにアップロードしてください。
  2. WordPress の “プラグイン” メニューから有効化してください。
  3. 以上です。このプラグインはバックグラウンドで動作します。

FAQ

どうやったら貢献できますか?

このプラグインは GitHub kuno1/hagakure にホストされています。気軽にプルリクエストを送ったり、イシューを立てたりしてください。

評価

2019年5月10日
This plugin makes it easy to find the root cause of PHP Fatal error: Allowed memory size of xxxxxx bytes exhausted error. AWESOME.
2件のレビューをすべて表示

貢献者と開発者

葉隠 – Yet Another Error Reporter はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。

貢献者

“葉隠 – Yet Another Error Reporter” は1ロケールに翻訳されています。 翻訳者のみなさん、翻訳へのご協力ありがとうございます。

“葉隠 – Yet Another Error Reporter” をあなたの言語に翻訳しましょう。

開発に興味がありますか ?

コードを閲覧するか、SVN リポジトリをチェックするか、開発ログRSS で購読してみてください。

変更履歴

1.3.1

  • PHPとWordPressの必須バージョンを上げる。
  • メモリーリミットのエラーログに関するロジックを変更。
  • 所有権をクノイチ株式会社からタロスカイ株式会社に移しました。タロスカイはクノイチの親会社です。開発者は同じです ☺️

1.2.0

  • スロークエリがバックトレース付きで保存されるように。

1.1.0

  • バックトレースに現在のURIを追加

1.0.0

  • Warning と Notice の詳細を扱えるよう変更。

0.8.0

  • 最初のリリース。