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 相关文章推荐
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
PHP定时更新程序设计思路分享
Jun 10 PHP
php禁止浏览器使用缓存页面的方法
Nov 07 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
php实现的通用图片处理类
Mar 24 PHP
PHP中set error handler函数用法小结
Nov 11 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
实例分析PHP中PHPMailer发邮件
Dec 13 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 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
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
php注册登录系统简化版
2020/12/28 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
python 决策树算法的实现
2020/10/09 Python
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
英国电气世界:Electrical World
2019/09/08 全球购物
小学教师节活动方案
2014/01/31 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
会计主管竞聘书
2015/09/15 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS