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 来访国内外IP判断代码并实现页面跳转
Dec 18 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
Fine Uploader文件上传组件应用介绍
Jan 06 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
php动态添加url查询参数的方法
Apr 14 PHP
android上传图片到PHP的过程详解
Aug 03 PHP
php验证码的制作思路和实现方法
Nov 12 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
Feb 04 PHP
YII Framework框架教程之国际化实现方法
Mar 14 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
Oct 29 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
php实现小程序支付完整版
Oct 09 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
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
2013/07/01 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
php创建session的方法实例详解
2015/01/27 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
jQuery判断密码强度实现思路及代码
2013/04/24 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
webpack常用构建优化策略小结
2019/11/21 Javascript
js实现点击烟花特效
2020/10/14 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
Python requests设置代理的方法步骤
2020/02/23 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
美国在线家具网站:GDFStudio
2021/03/13 全球购物
小区门卫管理制度
2014/01/29 职场文书
销售人员获奖感言
2014/02/05 职场文书
致裁判员加油稿
2014/02/08 职场文书
《云房子》教学反思
2014/04/20 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
机械操作工岗位职责
2014/08/08 职场文书
六年级作文之关于梦
2019/10/22 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python
在redisCluster中模糊获取key方式
2021/07/09 Redis
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python