wordpressの高速化

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