CentOS 6.5:nginx,php-fpm環境が「重い」と感じる場合の対応

Webサーバーの高速化を狙い「Apache」から「Nginx」に切り替えてみたもの、予想していた「パフォーマンス」がでない…と感じている場合、「php-fpm」のプロセスがサーバーのメモリを食い潰している可能性があります。特に「VPS」など、使用可能メモリが少なく上限がある環境では、「php-fpm」のチューニングを行うことで、メモリまわりの改善が期待できます。(2015/05/09作成)

WikimediaImages / Pixabay

0.環境

[crayon]
$ nginx -v
nginx version: nginx/1.8.0

$ php-fpm -v | head -n 1
PHP 5.4.33 (fpm-fcgi) (built: Sep 20 2014 16:21:53)
[/crayon]

1.確認

プロセス毎のメモリ使用量(単位:kb)

[crayon]
$ ps alx | awk ‘{printf (“%d\t%s\n”, $8,$13)}’ | sort -nr | head -10
95584 php-fpm:
94768 php-fpm:
92532 php-fpm:
92048 php-fpm:
88028 php-fpm:
87036 php-fpm:
85952 php-fpm:
85008 php-fpm:
78148 php-fpm:
77956 php-fpm:
[/crayon]

2.チューニング

[crayon]
$ sudo vi /etc/php-fpm.d/www.conf
[/crayon]

プロセスマネージャが子プロセスの数を制御する方法を選択します。 使用可能な値: static, ondemand, dynamic このオプションは必須です。

[crayon]
< pm = static --- > pm = dynamic
[/crayon]

pm が static の場合は作成される子プロセスの数、 pm が dynamic の場合は作成される子プロセスの最大数。 このオプションは必須です。

[crayon]
< pm.max_children = 50 --- > pm.max_children = 15
[/crayon]

アイドル状態のサーバープロセス数の最大値。 pm が dynamic の場合にのみ使います。 また、この場合には必須となります。

[crayon]
< pm.max_spare_servers = 35 --- > pm.max_spare_servers = 15
[/crayon]

各子プロセスが、再起動するまでに実行するリクエスト数。 サードパーティのライブラリにおけるメモリリークの回避策として便利です。 再起動せずにずっとリクエストを処理させる場合は ‘0’ を指定します。 PHP_FCGI_MAX_REQUESTS と同じです。デフォルト値: 0

[crayon]
< ;pm.max_requests = 500 --- > pm.max_requests = 512
[/crayon]

3.設定反映

[crayon]
$ sudo /etc/init.d/php-fpm reload
$ sudo /etc/init.d/nginx restart
[/crayon]

以上

About yoshimasa

埼玉県さいたま市在住、2男3女のパパです。Linux系の技術情報を中心にまとめています。1978年2月生まれ。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください