SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

wp-cron を止めて負荷を減らす

問題

レンタルサーバーで WordPressを動かしています。

時々引っかかったように遅くなることがあります。

なぜでしょう?

答え

時々発生するということでは、wp-cron.php の処理が遅いのかもしれません。

wp-cron.php は、WordPressに必要な定期的な処理を、Webサイトへのアクセスをトリガーにして実行しています。

予約投稿の公開やバージョンアップの確認などが、毎回ではないですが、Webサイトへのアクセスと同時に発生することになります。

ちょうどそういった重い処理にあたると、妙にレスポンスが悪い状態が発生します。

Webサイトへのアクセスをトリガーにしないで、サーバー側のcronで実行するようにすると、Webのほうの負荷が減ります。

サーバー側のcronで実行するように変えるには以下のようにします。

WordPressの設定変更

wp-cron.php を実行しないように wp-config.php に以下を追記します。

define('DISABLE_WP_CRON', 'true');

「/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */」の行の手前でよいです。

サーバーのcron設定

Webで実行するなら http://~~ にアクセスですが、サーバー側のcronで実行するなら、以下のようにコマンドライン版のphpで実行します。

/usr/local/bin/php /home/user1001/www/example.com/wp-cron.php

サーバーにsshでログインして手動で実行するときは上のコマンドを実行します。

※ /usr/local/bin/php の部分はサーバーによって /usr/bin/php だったりします。環境に応じて確認してください。wp-cron.php のパスも環境によるので確認してください。

これをcronに設定するときは以下のようになります。

例)毎分実行

* * * * * /usr/local/bin/php /home/user1001/www/example.com/wp-cron.php

例)10分おきに実行

*/10 * * * * /usr/local/bin/php /home/user1001/www/example.com/wp-cron.php

例)毎時0分に実行

0 * * * * /usr/local/bin/php /home/user1001/www/example.com/wp-cron.php

例)1日1回10:30に実行

30 10 * * * /usr/local/bin/php /home/user1001/www/example.com/wp-cron.php

予約投稿の公開など日時に厳しい場合は毎分、たまに自動更新が実行されればいいだけなら毎時などでよいと思います。

レンタルサーバーの制限や負荷に応じて実行タイミング、実行頻度は調整するとよいです。

負荷が下がった事例

23日から DISABLE_WP_CRON にして、wp-cron.php は夜間に数回実行する程度にした。

グラフが全体的に低くなった。

上の例はメモリが1GBしかないサーバーなので、メモリを増やしたほうが良いかもしれない。

関連するメモ

コメント