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 相关文章推荐
分页显示Oracle数据库记录的类之一
Oct 09 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
php下关于Cannot use a scalar value as an array的解决办法
Aug 08 PHP
解析PHP缓存函数的使用说明
May 10 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
Apr 24 PHP
php实现的发送带附件邮件类实例
Sep 22 PHP
PHP生成树的方法
Jul 28 PHP
PHP正则表达式之捕获组与非捕获组
Nov 06 PHP
变量在 PHP7 内部的实现(一)
Dec 21 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 PHP
有关PHP 中 config.m4 的探索
Aug 26 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编程中字符串处理的5个技巧小结
2007/11/13 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
javascript 数组排序函数
2009/08/20 Javascript
JS 表单验证大全
2011/11/23 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
详解React 元素渲染
2020/07/07 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
numpy数组拼接简单示例
2017/12/15 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
24式加速你的Python(小结)
2019/06/13 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
导师推荐信范文
2014/05/09 职场文书
法人代表任命书范本
2014/06/05 职场文书
青年志愿者活动方案
2014/08/17 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
网络营销计划书
2015/01/17 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
初中思想品德教学反思
2016/02/24 职场文书
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python
再谈python_tkinter弹出对话框创建
2022/03/20 Python
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers