PHP-FPM实现性能优化
简介:
PHP-FPM是一个PHPFastCGI管理器,一般Nginx上面跑PHP程序都会将PHP程序丢给PHP-FPM来解析。好了,就这样!
PHP5.4开始集成了PHP-FPM,也就是说编译PHP时,只要--enable-fpm就装好了PHP-FPM。
一、安装PHP-FPM
shell>./configure--prefix=/usr/local/php\ --with-config-file-path=/usr/local/php--with-mysql=/usr/local/mysql/\ --with-mysqli=/usr/local/mysql/bin/mysql_config--with-gd--with-xsl--with-bz2\ --with-zlib--with-curl--with-pear--without-iconv--with-mcrypt\ --with-gettext--with-openssl--with-libxml-dir--with-png-dir--with-jpeg-dir--with-freetype-dir\ --with-libdir=lib64--enable-ftp--enable-fpm--enable-opcache--enable-exif--enable-soap--enable-bcmath--enable-calendar\ --enable-sockets--enable-mbstring--enable-gd-native-ttf--disable-rpath--disable-debug
##看到上面这堆参数了没有,这是在编译PHP,其中有一个参数是--enable-fpm没错,这就是启用PHP-FPM扩展。
shell>make;makeinstall
二、配置PHP-FPM
shell>cp/usr/local/src/php-5.6.17/php.ini-production/usr/local/php/php.ini#这是PHP的配置文件 shell>cp/usr/local/src/php-5.6.17/sapi/fpm/init.d.php-fpm/etc/init.d/php-fpm#这是PHP-FPM的启动脚本 shell>cd/usr/local/php/etc/ shell>cpphp-fpm.conf.defaultphp-fpm.conf#复制一份配置文件 shell>vimphp-fpm.conf [global] pid=run/php-fpm.pid#PID rlimit_files=65535#打开文件数限制 [www]#进程池 user=nginx#以nginx身份运行 group=nginx listen=127.0.0.1:9000#监听本机的9000端口 ;listen=/dev/shm/php-cgi.sock;#监听UNIXSOCKET,并把SOCKET放在了内存空间中,速度更快(Nginx也要相应修改)! ;listen.backlog=10240#UNIXSOCKET的方式高并发下有点不稳定,该参数用来缓解(SOCKET等待队列长度) ;listen.owner=nginx#UNIXSOCKET的权限 ;listen.group=nginx ;listen.mode=0660 pm=dynamic#创建进程的方式,动态创建 pm.max_children=32#最大进程数(不能只看内存来创建,要看具体使用率,有时内存足够,进程数大多时,导致CPU频繁上下文切换,负载会很高) pm.start_servers=5#初始进程数 pm.min_spare_servers=5#最小空闲进程数 pm.max_spare_servers=10#最大空闲进程数 pm.status_path=/php_status#PHP-FPM状态监控(Nginx要设置访问权限) shell>servicephp-fpmstart
三、监控PHP-FPM
shell>vim/usr/local/nginx/conf/nginx.conf location~/php_status{#创建一个单独的server或直接在server{}中加入配置 access_logoff; allow127.0.0.1; allow36.110.41.194;#做好权限 denyall; fastcgi_pass127.0.0.1:9000;#如果是UNIXSOCKET的方式,要类似这样写:fastcgi_passunix:/dev/shm/php-cgi.sock; fastcgi_paramSCRIPT_FILENAME$fastcgi_script_name; includefastcgi_params; } shell>kill-HUP`cat/usr/local/nginx/logs/nginx.pid` shell>curlhttp://127.0.0.1/php_status#访问该路径得到如下数据 pool:www#进程池名称 processmanager:dynamic#进程管理方式 starttime:22/Jan/2016:15:49:00+0800#启动时间 startsince:375#运行时长 acceptedconn:7#当前进程池接受的请求数 listenqueue:0#请求等待队列,如果不为0,意味着FPM进程不足,需要增加 maxlistenqueue:0#最大等待队列数量 listenqueuelen:1024#SOCKET等待队列长度 idleprocesses:4#空闲进程数 activeprocesses:1#活跃的进程数 totalprocesses:5#总进程数 maxactiveprocesses:1#最大活跃进程数 maxchildrenreached:0#达到最大进程数的次数,如果不为0,意味着最大进程数不足,需要增加 slowrequests:0#慢请求数量,需要设置slowlog shell>curlhttp://127.0.0.1/php_status#这里有多种参数供选择,例如:http://127.0.0.1/php_status?html、?json、?xml、?full
#我想,用python脚本用做个监控,?json格式是最好不过了吧!