サイトを移転してから暫く悩んでいたんですが、解決してみたらあっけなかった。
Google Compute Engineはご存知の通りスペックがピンからキリまであるのですが、個人ブログを運用する程度ならもちろん一番安いスペックでも十分です。チューニングをちゃんとすればね!
2017/3/27 表現改訂と追記。
2018/3/2 Event MPMのチューニング話を追記
Crucialな解決策
Swap領域増やそう。
GCEの一番安いやつはメモリ0.60GBです。
スワップ領域は一般にはメモリの2倍程度あれば良いらしいですが、デフォルトでは200MB程度しかありません。
これだとWPの管理画面をうろうろするだけで500エラーが頻発します。カツカツなんで自然回復待ちだと何十分もサイトが落ち続けるし、再起動でもまたすぐにApacheの所為で逼迫して定期再起動が必要になります。
Swap領域の増やし方はググろう。
メモってなかったらインスタンス再起動でスワップが吹き飛んでしまって困った。下のページが参考になります。
http://landisk.kororo.jp/debian/14_swap.php
虚しい失敗策の数々
PHPのmemory_limitを上げる
元々128Mと結構大きめに取っていましたが、256Mに上げました。
Apacheの調整
KeepAlive周り。しかし初期値で既に最適化されていました。
MySQLの調整
キャッシュやバッファの値を調整。
restartだとエラーが出るので、ApacheもMySQLもstopしてから起動させる。
Zend OPcacheの有効化
メモリに効くかどうかわかりませんが高速になると聞いてやってみました。実際速くなりました。
zend_extension=/...
は書くと「既に読み込まれている」旨のエラーが出たので削除。
参考にしたページのリンクだけ書いておきます。
Event MPMにする
スレッドセーフにPHPをコンパイルしてあったのでWorkerにしてみよう、と思ったらデフォルトで更に進化版のEventになっていました。
Apache2.4からはデフォルトでEvent MPMになってるのに気付かなかった話
最初に書いた「Apacheの調整」はWorker向けのだったので無駄でござった。
Eventの方でも少しずつ値を変えてチューニングしていましたが、結局決定打はSwapという…。
追記
記事投稿直後に頻繁に落ちるのでtop等でプロセス数の推移など観察してみた所、
やはり1番安いマシンではしんどいところもあるようです。
私の環境では結局以下のようにすることで、
投稿直後はCPU利用率が高くなり落ちることもありますが、2分程度以内に復旧するようにはなりました。
<IfModule mpm_event_module>
StartServers 1
ServerLimit 8
ThreadLimit 4
ThreadsPerChild 4
MinSpareThreads 4
MaxSpareThreads 16
MaxRequestWorkers 32
MaxConnectionsPerChild 0
</IfModule>
そんなに重い処理をするようなサイトではないはずなんですが、自作コードがそこらじゅうにあるので何かしらが足引っ張ってるのかも。
重くなるの投稿公開・編集した時だけだし。
独り言
もうちょっとやった操作とかメモ残しとけば良かった。
分類できなかった参考リンクだけメモ代わりに置いておきます。