关于IT运维技术的
最佳实践博客网站

lnmp架构里的php-fpm参数优化

下面是摘自Google讨论话题:《 PHP-FPM on highload tips 》

如果你的高负载网站使用PHP-FPM管理FastCGI,也许下面这些技巧对你有用

1、尽量少安装PHP模块,最简单是最好(快)的,建议编译安装php

2、把你的PHP FastCGI子进程数调到100或以上,在4G内存的服务器上200就可以(建议压力测试来得出自己服务器合理的值)

3、socket连接FastCGI,/dev/shm是内存文件系统,socket放在内存中肯定会快些

fastcgi_pass  unix:/dev/shm/php-fpm.sock;

4、Linux下增加文件打开数,命令如下:

cat >> /etc/security/limits.conf <<EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
EOF

5、增加 PHP-FPM 打开文件描述符的限制:

# vim /usr/local/php/etc/php-fpm.conf
rlimit_files = 51200

6、使用php代码加速器,例如 eAccelerator, XCache,opcache 在Linux平台上可以把`cache_dir`缓存相关目录指向 /dev/shm

php-fpm.conf重要优化参数详解:vim /usr/local/php/etc/php-fpm.conf 

pm = dynamic

pm表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。

如果设置成static,php-fpm进程数自始至终都是pm.max_children指定的数量,不再增加或减少。

如果设置成dynamic,则php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多,则会自动增加,保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证多余的进程数不多于pm.max_spare_servers。

动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗。

下面对php-fpm一些参数进行解释

#static模式下创建的子进程数
#dynamic模式下同一时刻允许最大的php-fpm子进程数量
pm.max_children = 24

有一些朋友认为,如果dm设置为dynamic,那么pm.max_children参数将失效,后面3个参数正式生效。系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。

#动态方式下的起始php-fpm进程数量
pm.start_servers = 16
#动态方式下服务器空闲时最小php-fpm进程数量
pm.min_spare_servers = 12
#动态方式下服务器空闲时最小php-fpm进程数量
pm.max_spare_servers = 24

一些经验:

一般php-fpm进程占用20~30m左右的内存就按30m算。如果单独跑php-fpm,动态方式起始值可设置物理内存Mem/30M,由于大家一般NginxMySQL都在一台机器上,于是预留一半给它们,即php-fpm进程数为$Mem/2/30。

LNMP在一台机器上参数(仅供参考,建议压力测试得出):

Mem=`free -m | awk '/Mem:/{print $2}'`
sed -i "s@^pm.max_children.*@pm.max_children = $(($Mem/2/20))@" /usr/local/php/etc/php-fpm.conf
sed -i "s@^pm.start_servers.*@pm.start_servers = $(($Mem/2/30))@" /usr/local/php/etc/php-fpm.conf
sed -i "s@^pm.min_spare_servers.*@pm.min_spare_servers = $(($Mem/2/40))@" /usr/local/php/etc/php-fpm.conf
sed -i "s@^pm.max_spare_servers.*@pm.max_spare_servers = $(($Mem/2/20))@" /usr/local/php/etc/php-fpm.conf

1G内存的阿里云主机的php-fpm配置。

[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice

[www]
listen = /dev/shm/php-fpm.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 24
pm.start_servers = 16
pm.min_spare_servers = 12
pm.max_spare_servers = 24
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log
赞(0)
未经允许不得转载:菜鸟HOW站长 » lnmp架构里的php-fpm参数优化

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址