nginx+php-fpm環境で、wordpressの高速化のためにサーバーサイドで出来ることを色々調べてみた
正直あんまり理解できていないが、自分用に参考になるサイトをまとめる意味でもメモを残しておこう……
・nginxの設定
1つのポートを複数のプロセスで共有したり出来るソケットシャーディングという機能があるらしい
listenディレクティブにreuseportと追記すれば使える
open_file_cacheでファイルのメタデータをキャッシュできる
httpディレクティブ内にopen_file_cache max=100 inactive=20sとすると、キャッシュの最大数と20秒間非アクティブファイルをクリアという設定になる
ファイル本体をキャッシュするのではなく、ファイルのメタデータのキャッシュをするのでそこまで変わらないかもしれないが…
・phpの設定
PHPアクセラレータ
PHPを実行するときは一度実行中間コードにしてから、実行するという仕組みになっており、中間コードのキャッシュをするのがPHPアクセラレータ
アクセラレータ機能とユーザーキャッシュ機能を持っているAPCがphp5.4まで対応していましたが、今は更新されておらず、その後継がopcache、apcuである
opcacheがアクセラレータ機能、apcuがユーザーキャッシュ機能を持つ
php.iniに設定を書き込んで有効化できる
apcuについては試していないが、opcacheについては、以下をphp.iniに追記すればいい
[opcache] opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1
・sqlの設定
Innodb_buffer_pool_sizeでinnodbのバッファサイズ指定
innodbを用いている全てのテーブルの合計容量以上の値を設定すると本来のパフォーマンスが設定できる。サイトに合わせてある程度チューニングする必要がある。
一般的な値は、5-6GB(8GB RAMの場合)、20-25GB(32GB RAM)、100-120GB(128GB RAM)らしい( https://yakst.com/ja/posts/200 )
・プラグイン
wordpressは英語圏で作成されたため、日本語で使おうと思うと、moファイルを毎回パースして、オブジェクトを作り、それを参照して翻訳している
PHPオブジェクトに変換されたものをキャッシュすると高速化できる
001 Prime Strategy Translate Acceleratorなどのプラグインで実現可能
・OSの設定
正直まだ理解出来ていないが、net.core.somaxconnという設定をいじる必要もあるかもしれない。
これの設定によっては、高負荷時に接続要求を取りこぼすことがあるらしい。
以下、参考になりそうなサイト
http://sssslide.com/speakerdeck.com/cubicdaiya/nginxfalsepahuomansutiyuningu
https://gist.github.com/koudaiii/386eb55a29b1adc19c5e
http://labotech.dmm.com/entry/2015/11/13/151224
https://qiita.com/nntsugu/items/63099b829befb57859d7