こんにちは。那須野です。
このブログはWordPressで運用しているのですが、たまたま過去の記事を読み漁っていた時にたった1つの記事だけなぜか表示されないという事実に気づきまして、サーバーを調査して直しましたというお話です。同じトラブルに遭遇する方はいるかもなと思い、備忘録的に記録します。
まず、表示されなかった記事は、Pythonのデータ処理についてまとめていたこの記事です。
なんと、タイトルの下が真っ白になっています…。なんだこれ…。
phpの内部的な話で言うと、タイトルなどの要素を構築したあとに、the_content関数を実行するときになんらかのエラーで失敗して、以下の要素が構築できずに白紙になっているようです。
これ以外に20個ほどの記事を目視確認しましたが、不具合が起きているのはこれだけのようです。ちなみに、もちろんこれを書いた当時はちゃんと表示されていましたし、最近になってこの記事を書き換えたわけでもありません。なぜこうなった…。
この記事の特徴は、このブログには珍しくプログラミングコードが満載であること。この時点で「もしかして特定のプログラミングコードが何らかのプラグインと競合して致命的なエラーを出しているのでは…?」という仮説を持ちましたが、すべてエスケープされているはずのHTMLコンテンツがエラーを吐き出すとは到底思えず、原因が分からない状態でした。
PHP側でエラーが起きていることは確実だったので、WordPressのサーバーのエラーログを確認してみることにしました。CentOSにWordPressを入れている方あるあるですが、
1 |
/var/log/httpd/ |
あたりのディレクトリに、日ごとにファイルが分かれてエラーログを出力するよう設定していることが多いです。実際、本日日付のファイルがあったので確認したところ、
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes) in {DIRECTORY_PATH}/wp-content/plugins/easy-table-of-contents/includes/inc.cord-functions.php on line 255
というエラーが出ていました。まさかのPHPのメモリエラー???
ちなみにeasy-table-of-contentsというのは、WordPressの記事に目次を挿入したくて最近になって追加したプラグインです。自由度が高くて簡単に使えるので採用していました。このエラーを見るに、いい感じに目次を生成するうえでメモリをたくさん使うんでしょうか…。
ということは、この記事がひっかかった原因は、おそらく文章量の多さと見出しタグの多さによる目次計算量の多さになります。プログラミングコードが大量に掲載されていたことで、他に記事にない文章量になっていたことが背景にありそうです。
原因は分かったので、解決に移ります。
これもCentOSにWordPressを入れている方あるあるですが、だいたいの方はetcフォルダにphp設定ファイルがありますので、
1 |
vim /etc/php.ini |
にて設定ファイルを開き、memory_limitのパラメータを調整してみます。もともと128MBだったのを256MBに変更し、その後
1 |
sudo systemctl restart httpd |
にてApacheサーバーを再起動したところ、すぐに直りました!
長文そうな記事を他にもいくつか見てみましたが、問題なさそうなのでひと安心です。
今回の問題は端的に言うと「WordPressプラグインがPHPメモリを食いつぶす問題」と言えるのではないでしょうか。
WordPressでブログを運営していると後からプラグインを追加するシーンは多いと思いますが、そうやって追加したときに計算量が多くなってPHPメモリを食いつぶし、過去の長文記事が見えなくなってしまうというのが今回の事象だったように思います。
WordPressのテーマ自体はちゃんと実装していてエラーはそうそう起きないと思っていて、それはそれでよかったのですが、インフラ側の問題もちゃんとケアしてあげないといけなかったですね。
以上、この備忘録が誰かの役に立ちますように。