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 相关文章推荐
php数据库配置文件一般做法分享
Jul 07 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
Sep 16 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
php禁用函数设置及查看方法详解
Jul 25 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
PHP实现图片的等比缩放和Logo水印功能示例
May 04 PHP
PHP设计模式之工厂模式详解
Oct 24 PHP
PHP如何将图片文件上传到另外一台服务器上
Aug 26 PHP
php和html的区别点详细总结
Sep 24 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
mysq GBKl乱码
2006/11/28 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
js资料prototype 属性
2007/03/13 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
2015/08/07 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
js实现中文实时时钟
2020/01/15 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
python定位xpath 节点位置的方法
2019/08/27 Python
详解Flask前后端分离项目案例
2020/07/24 Python
水果花束:Fruit Bouquets
2017/12/20 全球购物
旷课检讨书2000字
2014/01/14 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
品质主管岗位职责
2014/03/16 职场文书
镇创先争优活动总结
2014/08/28 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
编写python程序的90条建议
2021/04/14 Python
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python