讲师中心 微信公众号
AI工具推荐 视频效率加速

服务器硬件:CPU核心数与PHP-FPM进程数的配比

浅丽姑娘_8985

浅丽姑娘_8985

发布时间:2026-05-05 15:49:46

|

322人浏览过

|

来源于php中文网

原创

应按负载类型与内存实测双重约束确定pm.max_children:I/O密集型取CPU核数×1.5–2.0,CPU密集型取×1.0–1.2,再与内存上限(可用内存÷单进程RSS)取小值;dynamic模式下start_servers、min_spare_servers、max_spare_servers按max_children的0.7、0.5、0.9梯度设置,并配pm.max_requests=500–3000防泄漏。

服务器硬件:cpu核心数与php-fpm进程数的配比

如果您在配置PHP-FPM时发现响应延迟高、CPU利用率偏低或内存频繁告警,则很可能是CPU核心数与pm.max_children参数之间未形成合理配比。以下是针对该问题的多种配比方案与实操路径:

一、按应用负载类型匹配进程数

PHP-FPM进程并非越多越好,其数量必须适配实际请求的计算与等待特征。I/O密集型请求(如数据库查询、远程API调用)可容忍更高并发进程,而CPU密集型任务(如图像处理、加密运算)则需严格限制单核承载量,避免上下文切换开销反噬性能。

1、识别当前站点负载类型:执行mysqladmin proc或strace -p $(pgrep -f 'php-fpm: pool www' | head -1) -e trace=write,read -c 10观察系统调用分布;若read/write占比超65%,判定为I/O密集型。

2、I/O密集型场景下,设置pm.max_children = CPU核心数 × 1.5~2.0;例如8核服务器,取值范围为12~16。

立即学习“PHP免费学习笔记(深入)”;

3、CPU密集型场景下,设置pm.max_children = CPU核心数 × 1.0~1.2;例如8核服务器,取值范围为8~10。

4、混合型应用(如Laravel+MySQL+Redis)建议从CPU核心数 × 1.3起步,再结合内存实测调整。

二、以内存可用量为硬约束反推上限

每个PHP-FPM子进程的RSS内存占用受框架、扩展、OPcache启用状态影响极大,仅凭CPU核数估算极易导致OOM。必须以实测内存为最终裁决依据,否则所有配比均无意义。

1、获取当前活跃php-fpm进程平均内存:运行ps --no-headers -o rss -C php-fpm | awk '{sum+=$1} END {print int(sum/NR/1024)" MB"}'。

2、确认服务器可用内存:执行free -h,减去系统基础占用(建议预留至少4GB)、数据库服务内存、宝塔面板自身开销后,得出PHP可用内存。

3、计算内存允许最大进程数:可用内存(MB) ÷ 单进程平均RSS(MB) = 内存上限值。

4、将该内存上限值与CPU公式结果对比,取二者中较小者作为最终pm.max_children值。

三、启用NUMA绑定规避跨节点延迟

在双路Xeon或EPYC服务器上,Linux默认NUMA策略可能导致php-fpm进程被调度至CPU1,却从CPU0的内存节点分配堆内存,造成30%以上访问延迟。此时单纯增加进程数反而恶化性能,必须强制进程与本地内存绑定。

1、查看NUMA拓扑:运行numactl --hardware,记录各node的CPU及内存分布。

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载

2、确认php-fpm主配置文件路径(如/etc/php/8.2/fpm/php-fpm.conf),在[global]段添加:include=/etc/php/8.2/fpm/conf.d/numa.conf。

3、新建/etc/php/8.2/fpm/conf.d/numa.conf,写入:php_admin_value[sysctl] = "vm.swappiness=1"与php_admin_value[numactl] = "--cpunodebind=0 --membind=0"(node编号依实际拓扑替换)。

4、重启服务前校验:php-fpm8.2 -t,成功后执行systemctl restart php8.2-fpm。

四、动态模式下空闲进程梯度配置法

静态模式(static)虽便于控制,但无法适应流量峰谷;动态模式(dynamic)通过空闲进程缓冲区吸收突发请求,是生产环境首选。其关键在于start_servers、min_spare_servers、max_spare_servers三者构成的梯度关系必须与CPU核心数形成比例闭环,否则易出现“冷启动卡顿”或“空闲积压”。

1、确定pm.max_children后,设pm.start_servers = pm.max_children × 0.7(如max_children=12,则start_servers=8)。

2、设pm.min_spare_servers = pm.max_children × 0.5(如max_children=12,则min_spare_servers=6)。

3、设pm.max_spare_servers = pm.max_children × 0.9(如max_children=12,则max_spare_servers=10)。

4、验证配置生效:执行php-fpm8.2 -s,检查输出中start servers、min spare servers等字段是否与设定一致。

五、进程回收与泄漏防控协同配置

即使进程数配比精准,若不控制单进程生命周期,内存泄漏会随请求累积,最终触发OOM Killer杀掉php-fpm主进程。pm.max_requests参数必须与应用稳定性匹配,而非统一设为固定值。

1、对轻量脚本(纯HTML输出、简单查询):设pm.max_requests = 3000,平衡回收开销与稳定性。

2、对框架类应用(ThinkPHP、Yii2):设pm.max_requests = 1000,防范扩展层隐式泄漏。

3、对已知存在泄漏风险的扩展(如旧版xdebug、某些自定义Swoole协程封装):设pm.max_requests = 500,并同步开启慢日志定位泄漏源头。

4、启用慢日志:在www.conf中取消注释slowlog = /www/wwwlogs/php_slow.log与request_slowlog_timeout = 5s,重启后观察日志中script_filename与duration字段。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

10364

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

6101

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2115

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

3848

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

4534

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

3571

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

5077

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3982

2023.11.13

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

0

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn