一、名词解释

CGI是Common Gateway Interface(通用网管协议),用于让交互程序和Web服务器通信的协议。负责处理URL的请求,启动一个进程,将客户端发送的数据作为输入,有Web服务器收集程序的输出并加上合适的头部,再发送回客户端。

FastCGI是基于CGI的增强版本的协议,不同于创建新的进程来服务请求,使用持续的进程和创建的子进程来处理连串的进程,这些进程由FastCGI服务器管理,开销更小,效率更高。

PHP-FPM是PHP实现的FastCGI Process Manager(FastCGI进程管理器),用于替换PHP FastCGI的大部分功能,适用于高负载网站。支持的功能如:

  1. 平滑停止/启动的高级进程管理功能

  2. 慢日志记录脚本

  3. 动态/静态子进程产生

  4. 基于php.ini的配置文件

二、PHP-FPM配置

PHP-FPM配置文件为php-fpm.conf (例如:php-fpm容器中的/usr/local/etc/php-fpm.d/xlaravel.pool.conf)。下面所有的子进程均指php-fpm进程,可以在终端通过 ps aux |grep php 查看到。

  • 显示 php-fpm: pool www 的代表work子进程(实际处理请求)
  • 显示 php-fpm: process master 的代表master主进程(负责管理work子进程)
user = www-data
group = www-data
#启动进程的帐户和组 listen = 0.0.0.0:9000 pm = dynamic
#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由以下参数决定:
pm.max_children = 20 #,子进程最大数
pm.start_servers = 45 #,启动时的进程数
pm.min_spare_servers = 30 #,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers = 60 #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 request_terminate_timeout = 300
#设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的’max_execution_time’因为某些特殊原因没有中止运行的脚本有用. 设置为 ’0′ 表示 ‘Off’.当经常出现502错误时可以尝试更改此选项。 catch_workers_output = yes
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.
php-fpm优化参数介绍

他们分别是:pm、pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers。

pm:表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。

下面4个参数的意思分别为:
pm.max_children:静态方式下开启的php-fpm进程数量
pm.start_servers:动态方式下的起始php-fpm进程数量
pm.min_spare_servers:动态方式下的最小php-fpm进程数
pm.max_spare_servers:动态方式下的最大php-fpm进程数量 区别:
如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。
如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。
系统会在php-fpm运行开始 的时候启动pm.start_servers个php-fpm进程,
然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数
ps auxw|head -1;ps auxw|sort -rn -k4|head -40
# 查看消耗内存最多的前40个进程 ps -fe |grep "php-fpm"|grep "pool"|wc -l
# 查看服务器上一共开了多少的 php-cgi 进程

最新文章

  1. maven权威指南学习笔记(四)—— maven生命周期(lifecycle)
  2. Python之with语句
  3. Web前端开发基础 第四课(CSS小技巧)
  4. GCC编译器编译链接
  5. Linux----快速注释包含特定字符串的行
  6. 制作PPT时,可能这些小习惯你需要注意
  7. javascrip中array使用(续)
  8. js - get-the-value-from-the-url-parameter(可以在非模态对话框中使用)
  9. 批量处理csv格式转换成xls
  10. Hibernate composite key
  11. Hadoop的编译
  12. MySQL 开发实践
  13. DP问题
  14. Flask入门第一天
  15. 挂载银行前置机Ukey到windows server2012虚拟机的操作记录
  16. 矩形嵌套(dp)
  17. 【Python】requests.post请求注册实例
  18. Linux上实现Windows的SQLPlus保存SQL历史记录功能
  19. js document.activeElement及使用
  20. 20145325张梓靖 《Java程序设计》第6周学习总结

热门文章

  1. 解决 OnDropFiles 可能无响应的问题【转】
  2. linux 20个常用命令
  3. javaSE面向对象编程
  4. MapReduce框架原理-OutputFormat工作原理
  5. PTui又加全景图 佳田未来城 of 安阳
  6. 测试JUC安全类型的集合:CopyOnWriteArrayList
  7. Oracle 数据库的导入与导出
  8. 微信小程序中wx.login和wx.getUserProfile的使用
  9. NOIP 模拟 $14\; \text{抛硬币}$
  10. 题解 Prime