总体判断 在 CentOS 上,php-fpm 的内存占用取决于并发请求量、每个子进程的实际内存以及 pm(进程管理方式)等配置。单个 php-fpm 子进程常见占用约 20–50MB(实际以你的代码与扩展为准);当并发上来或 pm.max_children 设置偏大时,总内存会被快速放大,出现“内存占用高”的现象。很多实际案例通过调整进程数即可明显回落内存使用。
快速排查步骤
free -m、top(按 M 排序)、ps auxw | head -1; ps auxw | sort -rn -k4 | head -50ps -ef | grep php-fpm: pool www | wc -lps -ylC php-fpm --sort:rsssystemctl restart php-fpm常见原因
优化建议
ps -ylC php-fpm --sort:rss 看 RSS,取稳定值作为估算基准(记为 M)。max_children ≈ 可用内存 / M;小内存或混合部署场景常用经验:max_children ≈ 内存/2/30(以 30MB/进程 估算,需结合实际调整)。start_servers / min_spare_servers / max_spare_servers,通常让 max_spare_servers ≈ max_children 的 60%–80%。systemctl restart php-fpm → 观察 内存/请求错误/502 等指标,必要时回滚。示例计算
max_children ≈ (2GB - 1GB) / 30MB ≈ 33。pm = dynamic,pm.max_children = 32,pm.start_servers = 8,pm.min_spare_servers = 6,pm.max_spare_servers ≈ 20(约为 max_children 的 60%–80%)。