让我们快速了解如何更好的设置 PHP-FPM,以实现高吞吐量和低延迟
默认情况下,大多数设置都将 PHP-FPM 的 PM(进程管理器)设置为 dynamic
,并且如果遇到内存不足的问题,还需要使用 ondemand
让我们看一下 php.net 文档中的选项,并介绍我最喜欢的设置 - static:
pm = dynamic
: 子进程的数量根据以下配置动态设置 pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers
pm = ondemand
: 进程在请求时按需创建,而不是动态的,其中 pm.start_servers
进程数量在服务启动时创建pm = static
: 子进程的数量由 pm.max_children
决定这看起来有点偏离主题,但我希望将其结合到我们的 PHP-FPM 调优主题中
我们都遇到过 CPU 缓慢的问题,无论是笔记本,虚拟机还是服务器。
你还记得 CPU 调频吗?(CPUFreq),它可以在 linux 和 Windows 上使用,可以将 CPU 频率设置为 ondemand
来提高性能和系统响应能力。
现在,我们来比较一下这些描述并寻找相似之处:
Governor = ondemand
: 按需快速动态调整 CPU 频率, 一有 cpu 计算量的任务,就会立即达到最大频率运行,空闲时间增加就降低频率Governor = conservative
: 按需快速动态调整 CPU 频率, 比 ondemand 的调整更保守Governor = performance
: 总是运行于最大频率有关更多详细信息,请参阅 CPUFreq 调控器选项的完整列表
有没有注意相似之处呢 ?
pm static
来实现最高性能pm static
设置在很大程度上取决于您的服务器有多少空闲内存。
基本上,如果你的服务器内存很低,那么 pm ondemand
或 dynamic
可能是更好的选择。
如果您拥有足够的内存,则可以设置 pm static
来避免大部分 PM 开销。
换句话说,当您进行数学运算时,应将 pm.static
设置为服务器可运行的最大数量的进程数,它就不会有内存不足或缓存压力的问题
[
](https://www.phpyc.com/content/images/2018/05/1509365223linux_top_php-fpm-using-static-pm.png)
在上面的截图中,PHP-FPM 的配置为 pm = static
和 pm.max_children = 100
它有 32GB的内存,在截图期间,Google Analytics 中约有 200 个 “活跃用户”(过去 60 秒)。
在这个级别上,约有 70%
的 PHP-FPM 进程仍然闲置。
这意味着 PHP-FPM 设置为服务器资源的最大容量后,它不会去在意当前流量,空闲进程会保持联机状态,等待流量高峰立即响应,而不必等到请求来了之后再创建进程
我将 pm.max_requests
设置的非常高,因为这是一个没有 PHP 内存泄漏的生产服务器。
如果您对当前和将来的 PHP 代码有 110% 的信心,可以将 pm.max_requests = 0
与 pm static
一起使用
使用 pm dynamic
,您可能会出现类似于下面的错误:
WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children
您可能会尝试调整 pm 配置,但仍然会看到同样的错误
在这种情况下,pm.min
太低,并且因为流量和峰值波动很大,使用 pm dynamic
可能难以调整
一般的建议是使用 pm ondemand
。 然而,情况会变的更糟,因为 ondemand
会在没有流量时关闭空闲进程,然后最终会产生与流量波动很大一样的开销问题 (除非您设置空闲超时的时间非常非常的长)
但是,当您拥有多个 pm 进程池时,pm dynamic
, 特别是 ondemand
是可以为您节省时间的
当流量波动比较大的时候,,PHP-FPM 的 ondemand
和 dynamic
会因为固有开销而限制吞吐量。 您需要了解您的系统并设置 PHP-FPM 进程数,以匹配服务器的最大容量。
从 pm.max_children
开始,根据 pm dynamic
或 ondemand
的最大使用情况去设置
您会注意到,在 pm static
模式下,因为您将所有内容都保存在内存中,所以随着时间的推移,流量峰值会对 CPU 造成比较小的峰值,并且您的服务器负载和 CPU 平均值将变得更加平滑。 每个需要手动调整的 PHP-FPM 进程数的平均大小会有所不同
附上一张 A/B 测试图
[](https://www.phpyc.com//content/images/2018/05/1509365219php-fpm-pm-bench.png)
[
](https://www.phpyc.com//content/images/2018/05/1509365219php-fpm-pm-bench.png)
最后希望这是一篇有用的文章 ?
本文由 Enda 翻译至 PHP-FPM tuning: Using ‘pm static’ for Max Performance
其中有一些自己的看法在里面,如果有错误欢迎纠正~ 谢谢欢迎关注我的博客和专栏,不定期更新好文章
博客地址:https://www.phpyc.com/
Original url: Access
Created at: 2018-10-10 14:33:34
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论