php5.6之php-fpm优化
一.php-fpm 三种运行方式 ondemand static dynamic
http://blog.csdn.net/pzqingchong/article/details/53379772二.关于php参数优化的辩证看待
https://www.douban.com/note/315222037/
http://www.myhack58.com/Article/sort099/sort0102/2012/33364.htm
三.php-fpm优化
1.php-fpm配置文件
/usr/local/php/etc/php-fpm.conf 管理php-fpm服务的配置文件
/usr/local/php/etc/php-fpm.ini php全局配置文件
[root@xclinux vhosts]# ps aux |grep php-fpm
root 891 0.0 0.4 29156 2928 ? Ss 19:47 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
php-fpm 892 0.0 0.9 30752 6560 ? S 19:47 0:00 php-fpm: pool www
php-fpm 893 0.0 0.9 30752 6556 ? S 19:47 0:00 php-fpm: pool www
root 1805 0.0 0.6 12332 4204 pts/0 T 22:34 0:00 vim /usr/local/php/etc/php-fpm.conf
root 1830 0.0 0.1 5980 744 pts/0 S+ 22:36 0:00 grep php-fpm
[root@xclinux vhosts]# vim /usr/local/php/etc/php-fpm.conf
root@xclinux vhosts]# vim /usr/local/php/etc/php-fpm.conf 可以设置多个pool
[global] ; pool 池
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
[www]
listen = /tmp/www.sock ;监听的sock或者IP+端口号
user = php-fpm
group = php-fpm
pm = dynamic ;动态的 使用static下面的pm配置不生效
pm.max_children = 50 ;子进程最多50个
pm.start_servers = 20 ; 开机启动20个子进程
pm.min_spare_servers = 5 ;空闲的时候最少保留5个进程
pm.max_spare_servers = 35 ;空闲的时候最多保留35个进程
pm.max_requests = 500 ;一个子进程生命周期内处理500个请求自动销毁
rlimit_files = 1024 ;每个进程使用使用文件描述符的限制
[www1]
listen = /tmp/www1.sock
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
注意:注释使用;而不能使用#
说明:
a. [global] 部分是全局配置,指定了服务指定的pid文件和错误日志路径
b. [www] 是一个pool(池)www是池的名称,如果有多个池就把这段内容复制一份粘贴在下面,并根据池的名称,以及listen的路径
c. listen 监听的sock或者IP+端口号。
监听的sock文件,这里这个文件需要和nginx的虚拟主机里面指定的这个文件名对应起来,多个站点最好是多个pool使用不同的sock文件,和pool名称
d. user 管理服务的用户名
e. group 管理服务的用户组
f. pm 池的方式:分为动态和静态,dynamic是动态,如果是静态static的话,那么下方pm.start_servers = 20生效,其他的PM配置选项均不生效
g. pm.max_children 表示php-fpm最大可以启动多少个子进程
h. pm.start_servers 表示服务一开启就启动多少个进程
i. pm.min_spare_servers 表示当php-fpm空闲时最少保留子进程数量,如果空闲时进程不够,那么会自动创建。
j. pm.max_spare_servers 表示当php-fpm空闲时最多保留子进程数量,如果空闲时进程超过,那么会自动销毁。
k. pm.max_requests 表示一个子进程可以接授多少个请求,如是设置为500,那么一个子进程受理到500个以后就会自动销毁
l. rlimit_files 每个进程使用使用文件描述符的限制、表示每个进程可以访问的文件数量。这个标签的值必须和Linux内核打开文件数关联起来,例如要将此值设置为65535,就必须在Linux命令行执行'ulimit -HSn 65536'。(ulimit –n可以查看对应数值)
扩展:如果你的网站访问时间比较慢,我们可以通过在相对应的池里面加入下面两行:
slowlog = /tmp/www.slow.log
request_slowlog_timeout = 1
上面两行的意思是访问的时候会把执行脚本超过1秒脚本记录下来,方便我们排查到底是脚本问题还是哪里的问题,这里的时间可以调整
如果我们想限制使用这个pool的用户的访问目录我们可以加入下面这样一行:
php_admin_value open_basedir=/data/www/:/tmp/
上面不同的目录中间用:冒号分开
扩展:如果你的网站访问时间比较慢,我们可以通过在相对应的池里面加入下面两行:
slowlog = /tmp/www.slow.log
request_slowlog_timeout = 1
上面两行的意思是访问的时候会把执行脚本超过1秒脚本记录下来,方便我们排查到底是脚本问题还是哪里的问题,这里的时间可以调整
如果我们想限制使用这个pool的用户的访问目录我们可以加入下面这样一行:
php_admin_value open_basedir=/data/www/:/tmp/
上面不同的目录中间用:冒号分开
[root@xclinux ~]# /usr/local/php/sbin/php-fpm -t
[12-Jun-2016 01:21:38] NOTICE: configuration file /usr/local/php/etc/php-fpm.conf test is successful
[root@xclinux ~]# /etc/init.d/php-fpm start
Starting php-fpm done
此时 ps aux|grep php-fpm 可以看到多个pool池进程 www和www1
好处:不同的域名对应不同的pool池,可以区分开权限。
www池发生故障时,不影响www1池运行。一个网站done掉,别的网站不会done。
[root@xclinux etc]# cd /usr/local/nginx/conf/vhosts/
You have new mail in /var/spool/mail/root
[root@xclinux vhosts]# ls
111.conf default.conf default.conf1.bak
[root@xclinux vhosts]# vim 111.conf
server
{
listen 80 ;
server_name www.111.com;
index index.html index.htm index.php;
root /data/www;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/www.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
}