ご注意下さい
この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。
久々にWordPressにアクセスしてみたら、異様に初期表示までに時間がかかることが判明し@ITの「とにかく速いWordPress」の一連の記事を見ながらチューニングを実施してきました。
その中でab(apache bench)を使って性能測定していたのですが、異様にレスポンスが早い時と、遅い時があったので、ログをtail -fで表示させながらabを実行していたところ、どうもwp-cron.phpというものが定期的に実行されており、この実行に体感で5秒程度かかっていそうなことが判明しました。
218.45.184.224 - - [06/Nov/2016:11:55:21 +0900] "GET / HTTP/1.0" 200 102759 "-" "ApacheBench/2.3"
218.45.184.224 - - [06/Nov/2016:11:55:21 +0900] "GET / HTTP/1.0" 200 102759 "-" "ApacheBench/2.3"
218.45.184.224 - - [06/Nov/2016:11:55:21 +0900] "GET / HTTP/1.0" 200 102759 "-" "ApacheBench/2.3"
218.45.184.224 - - [06/Nov/2016:11:55:21 +0900] "GET / HTTP/1.0" 200 102759 "-" "ApacheBench/2.3"
連続して同じURLにアクセスがあった場合には実行されないので、abのように同一URLにアクセスを繰り返す場合には一発目が遅いのみですが、都度違うURLにアクセスがあるような場合は毎回wp-cron.phpが実行されパフォーマンスにも影響しますし、リソースの無駄遣いとなります。
そこでまずはwp-config.phpをいじってwp-cronが実行されないように強制的に停止することとします。以下のように7行目を追加しましょう。
/** データベースのテーブルを作成する際のデータベースの文字セット */ define('DB_CHARSET', 'utf8'); /** データベースの照合順序 (ほとんどの場合変更する必要はありません) */ define('DB_COLLATE', ''); define('DISABLE_WP_CRON', 'true');
停止してしまったwp-cron.phpは定期的に実行してあげないと、バックアップや自動投稿などができなくなってしまいますので、OSの機能(cron)で実行することとします。CentOS7の場合は、/etc/cron.hourly配下に0wp-cron.cronファイルとして以下のファイルを作成します。
#!/bin/bash
# Action!
exec /usr/bin/wget -q -O - https://blog.kamata-net.com/wp-cron.php
これで「だいたい」1時間に1回wp-cron.phpが実行されることとなります。さらに頻度を短くしたい場合には以下の続編もご覧ください。
-
WordPressの性能チューニング(cron)続編
WordPressのパフォーマンスに大きな影響を及ぼすwp-cron.phpをOSから定期的に起動する設定方法のご紹介です。今回は1時間ごとではなく、 …続きを見る
記事は以上!