ブログサイトのserverをチューニングしました。

この記事を読む およそ時間 2

先日の大幅性能劣化を受けて

さて、先日の大幅性能劣化を目の当たりにして、流石に昨日ブログサイトのserverをチューニングしました。その後2時間くらいモニタリングしましたが、4つ程子serverが自動起動してきた位でメモリーは残量400MBくらい残量がある状態で安定しています。

行ったチューニングについて

nginx側とphp側をチューニングしました。チューニングポイントとしては、次の通りです。

設定ファイル:/etc/php-fpm.d/www.conf こいつをいじってあげます。

○リソースの自動配分の設定
変更前>pm = dynamic
変更後>pm = static

これについては、dynamicだと、serverに重みを任せる運用が出来る反面、リソースが潤沢に用意されている場合は有効ですが、このブログが動いて居るような品祖なserverでは、すぐout of memoryが発生して駄目になります。予想も出来ない為、基本的にstaticに設定を行うポリシーとしたいと思います。

○作成される子プロセスの最大数(apacheでいうとmaxclient) 同時に処理をする可能性がある子プロセス数
pm.max_children = 3

下記3つ動作している事が確認出来る。

○起動時に作成される子プロセス数(min_spare_servers + (max_spare_servers – min_spare_servers) / 2) プロセス開始時に生成される子プロセス
pm.start_servers = 5

○アイドル状態のサーバプロセス数の最小値
pm.min_spare_servers = 5

○アイドル状態のサーバプロセス数の最大値
pm.max_spare_servers = 10

○各子プロセスが再起動するまでに実行するリクエスト数(メモリーリーク防止)設定例だと200リクエストすると、破棄され再度起動されます。
pm.max_requests = 200

○phpのメモリ利用制限(これが前の設定では1024Mと大幅にでかい設定になってました)
php_admin_value[memory_limit] = 128M

○timeoutの設定(単一のリクエストを処理する際のタイムアウト。この時間を過ぎるとワーカープロセスが kill されます)
request_terminate_timeou = 20

とりあえず、上記有効そうなパラメーターのチューニングを行いました。今まで子serverのpm.max_requestsが入ってなかったので、200リクエストをカウントしたら、その子serverは削除されて別の子serverに引き継がれる設定を行いました。これが入ってないと長時間処理を行いメモリーリークの発生する確率が上がります。

zabbixの監視状況はどうよ?

昨日からのメモリーの状況ですが、特に変わり無く安定しています。

cacheサイズをロガーしてますが、これを見るとどこで人が一杯見てくれたのか?更新したタイミングとかモロわかりですね。

若干、小serverの数が少ない設定になってますが、ちょっと様子見ですかね。もともとserverのメモリーが少ないので、しょっぱい設定以外できないです。ただ、SSDの恩恵はかなり受けていると思います。

チューニングを行ってからCPUが結構食われている気がします。その分速度は出ている気がします。

今度時間が合ったら、zabbixで子プロセスの情報をロガーしてグラフを書いたりしてもおもしろいのかな?と思いました。

余談ですが、ちょっと負荷が高いと思ったら、Botがブログを舐めに来ている様ですね。

さっき無茶な設定したら、out of memoryになってOSがダウンしましたwww
コンソールよりフォースリセットをかけました。mariaDBが壊れていない事をねがって・・・。お願いマリアさーーーーん!!

Related posts