はじめに
本WebサイトはWordPressを使って構築しています。
技術的な記事を主に書いていますので、新着情報のTwitterでの拡散とかは技術的に面白そうなことが出てくればやってもいいかなぁという程度にしか考えていなかったのですが、技術的に面白そうなこと(*1)が出てきたので、SNAP(NextScripts: Social Networks Auto-Poster)プラグインをインストールして新着情報をTwitterで拡散させてみることにしました。(*1)の件については別途書きます。
新着情報をTwitterで拡散させるためにはWordpressにプラグインをインストールしなければならないので、SNAPプラグインをインストールしてみました。
しかし、SNAPプラグインのインストール以降Webサーバ内部におけるタイムアウトが原因と思われる以下のようなエラーが頻発(php-fpmがタイムアウトするとか、そういう雰囲気のやつです。)するようになりました。
さらに、上記のSNAPプラグインのインストール後は記事の編集もまともにできず、こんな感じのエラーページが表示されるようになってしまいました↓
自分で設定したやつなんですけどね… (なお、エラーページの設定の方法はこちらの記事を参照ください。)
そこで、SNAPプラグインの設定を行う前に、php-fpmをチューニングすることにしましたので、この記事ではその顛末について書いていきます。
やってみたこと。
前提条件についての簡単な説明。
本WebサーバはさくらのVPSの中でももっとも安いプランで稼働させています。つまり、
「やつはVPS四天王の中でも最弱…」とか言われてしまうやつです。
よって、明らかに冗長だったり、リソースを過剰に必要とする構成や設定を適正なものに調整するのが基本方針になります。
メモリが512MBという最貧仕様な中でたくましく稼働させています([2022/03/14補足]その後メモリを1GBにスケールアップしています。1GBにするとIPFSが辛うじて動かせます。IPFSについてはこちらをご覧ください。)ので、参考にされる際にはそのあたりを念頭においてお読みいただけると幸いです。ただし、この記事を参考にすることで、得られた結果につきましては責任は負いかねますので、あしからずご了承願います。
タイムアウトの時間を変えてみる。
スポンサーリンク
php-fpmのエラーメッセージを見たところ、「特定のPHPのプログラムの実行に30秒以上を要しているので、実行するのを止めた。」的なメッセージが出ていました。以下のような感じのメッセージです。
エラーが発生しているPHPファイルがメッセージ毎に異なるので、プログラムのバグというよりはリソース割り当てがうまくできていないことが原因の可能性が高そうだというところまでは見当をつけた上で、/etc/php.iniの以下の部分を30から60に変えてみてApache httpdを再起動してみました。
その結果…
エラーの発生状況には変化がありませんでした。orz
なお、最終的にはmax_execution_timeを120に変更しています。
/etc/php-fpm.d/www.confをちょっとだけいじってみる。
次は、php-fpm.dの下の設定ファイル(www.conf)をいじってみます。
最初に適当に設定を変えて本サイトのサーバを再起動してみたところ、httpdが動かなくなってしまったのは、今となってはいい思い出です。(´・ω・`)
で、こんなこともあろうかと取っておいた変更前のwww.confで/etc/php-fpm.d/www.confを上書きし、エラーログを見ながら再度設定をやり直してみました。
変更前との差分は以下の通りです。
--- www.conf.org 2018-10-16 08:29:28.381346560 +0900 | |
+++ www.conf 2018-10-16 09:41:21.542442575 +0900 | |
@@ -127,7 +127,7 @@ | |
; The desired maximum number of idle server processes. | |
; Note: Used only when pm is set to 'dynamic' | |
; Note: Mandatory when pm is set to 'dynamic' | |
-pm.max_spare_servers = 35 | |
+pm.max_spare_servers = 10 | |
; The number of seconds after which an idle process will be killed. | |
; Note: Used only when pm is set to 'ondemand' |
変更した部分は以下の通りです。最初は使用するメモリ量の上限も物理メモリの量に比べて多すぎると思い128→96MBに変更しましたが、レスポンスが悪くなってしまったので、128MBに戻しています。
- pm.max_spare_serversが35というのはちょっと多すぎるように感じたので、10に変更しました。
サーバの再起動。
気を取り直して本サイトのサーバを再起動してみると…
正常に動きました!!
しかもサクサクです。(`・ω・´)
いろいろと捗りそうです。
まとめ
とりあえず、ここまでに書いた設定でしばらく様子を見たいと思います。
今回のphp-fpmのチューニングは朝の満員電車の中でスマホからVXConnectBotを起動してWebサイトにログインして作業してみました。作業後にVPSを再起動しますが、httpdが動かないと結構焦ります。
スマホで起動したVXConnectBotでviエディタを使って設定ファイルを開いて編集したり、jキーとか叩いてたりするのを傍から見ているとゲームをやっているようにしか見えないわけですが、そのあたり大目に見てやっていただけると幸いです。
この記事は以上です。