PHP-FPM实现性能优化


Posted in PHP onMarch 31, 2016

简介:

PHP-FPM 是一个 PHP FastCGI 管理器,一般 Nginx 上面跑 PHP 程序都会将 PHP 程序丢给 PHP-FPM 来解析。好了,就这样!

PHP 5.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; make install

二、配置 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 > cp php-fpm.conf.default php-fpm.conf # 复制一份配置文件
shell > vim php-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; # 监听 UNIX SOCKET ,并把 SOCKET 放在了内存空间中,速度更快 ( Nginx 也要相应修改 )!
;listen.backlog = 10240 # UNIX SOCKET 的方式高并发下有点不稳定,该参数用来缓解 ( SOCKET 等待队列长度 )

;listen.owner = nginx # UNIX SOCKET 的权限
;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 > service php-fpm start

三、监控 PHP-FPM

shell > vim /usr/local/nginx/conf/nginx.conf

location ~ /php_status { # 创建一个单独的 server 或直接在 server {} 中加入配置

  access_log off;

  allow 127.0.0.1;
  allow 36.110.41.194; # 做好权限
  deny all;

  fastcgi_pass 127.0.0.1:9000; # 如果是 UNIX SOCKET 的方式,要类似这样写: fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
  include fastcgi_params;
}

shell > kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

shell > curl http://127.0.0.1/php_status # 访问该路径得到如下数据
pool: www               # 进程池名称
process manager: dynamic        # 进程管理方式
start time: 22/Jan/2016:15:49:00 +0800 # 启动时间
start since: 375            # 运行时长
accepted conn: 7            # 当前进程池接受的请求数
listen queue: 0            # 请求等待队列,如果不为 0 ,意味着 FPM 进程不足,需要增加
max listen queue: 0          # 最大等待队列数量
listen queue len: 1024         # SOCKET 等待队列长度
idle processes: 4           # 空闲进程数
active processes: 1          # 活跃的进程数
total processes: 5           # 总进程数
max active processes: 1        # 最大活跃进程数
max children reached: 0        # 达到最大进程数的次数,如果不为 0 ,意味着最大进程数不足,需要增加
slow requests: 0            # 慢请求数量,需要设置 slow log

shell > curl http://127.0.0.1/php_status # 这里有多种参数供选择,例如: http://127.0.0.1/php_status?html 、?json 、?xml 、?full

# 我想,用 python 脚本用做个监控,?json 格式是最好不过了吧!

PHP 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
php curl模拟post请求小实例
Nov 13 PHP
有关于PHP中常见数据类型的汇总分享
Jan 06 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
Mar 18 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
Jun 10 PHP
php提交post数组参数实例分析
Dec 17 PHP
php ajax实现文件上传进度条
Mar 29 PHP
php自动载入类用法实例分析
Jun 24 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
TP3.2.3框架文件上传操作实例详解
Jan 23 PHP
PHP实现通过URL提取根域名
Mar 31 #PHP
PHP的PDO操作简单示例
Mar 30 #PHP
PHP Smarty模版简单使用方法
Mar 30 #PHP
PHP格式化MYSQL返回float类型的方法
Mar 30 #PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 #PHP
PHP记录页面停留时间的方法
Mar 30 #PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 #PHP
You might like
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
2011/01/18 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
js里面的变量范围分享
2020/07/18 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
python计算文本文件行数的方法
2015/07/06 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
简单实现Python爬取网络图片
2018/04/01 Python
Python新手如何理解循环加载模块
2020/05/29 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
高性能装备提升营地:Kammok
2019/02/27 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
会展中心部门工作职责
2013/11/27 职场文书
快递业务员岗位职责
2014/01/06 职场文书
洗发露广告词
2014/03/14 职场文书
产品质量承诺书
2014/03/27 职场文书
法制宣传月活动方案
2014/05/11 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
nginx配置限速限流基于内置模块
2022/05/02 Servers