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 和 HTML
Oct 09 PHP
将OICQ数据转成MYSQL数据
Oct 09 PHP
PHP读取MySQL数据代码
Jun 05 PHP
php计算十二星座的函数代码
Aug 21 PHP
ThinkPHP3.1基础知识快速入门
Jun 19 PHP
php实现字符串翻转的方法
Mar 27 PHP
php生成PDF格式文件并且加密
Jun 22 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP中__set()实例用法和基础讲解
Jul 23 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 PHP
php 解析非标准json、非规范json
Apr 01 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流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
jQuery 解析xml文件
2009/08/09 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
在Angular中使用JWT认证方法示例
2018/09/10 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
微信小程序select下拉框实现效果
2019/05/15 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
python中列表元素连接方法join用法实例
2015/04/07 Python
Python遍历目录的4种方法实例介绍
2015/04/13 Python
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
便捷提取python导入包的属性方法
2018/10/15 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
NumPy中的维度Axis详解
2019/11/26 Python
中国好声音华少广告词
2014/03/17 职场文书
四群教育工作实施方案
2014/03/26 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
导师工作推荐信范文
2014/05/17 职场文书
大学毕业生推荐信
2014/07/09 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
拿破仑传读书笔记
2015/07/01 职场文书
2016年小学生寒假总结
2015/10/10 职场文书