商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > ubuntu下php-fpm内存占用高怎么办

ubuntu下php-fpm内存占用高怎么办

  发布于2026-07-14 阅读(0)

扫一扫,手机访问

Ubuntu下PHP-FPM内存占用高的解决方法

在Ubuntu服务器上跑PHP,最让人头疼的莫过于内存突然飙升,一个PHP-FPM进程就把整台机器拖垮。别慌,其实背后就那么几个原因,咱们一步步排查、优化,完全能搞定。

1. 排查内存占用现状

先搞清楚内存到底占了多少,别盲目猜。用下面几个命令,一分钟就能摸清底细:

ubuntu下php-fpm内存占用高怎么办

  • top 命令,然后按 M 键按内存排序,直观看到PHP-FPM进程的占比;
  • 统计子进程总数:ps -fe | grep "php-fpm" | grep "pool" | wc -l
  • 分析单个进程的内存消耗:ps -ylC php-fpm --sort:rss,重点看RSS列,找出那些“吃内存大户”的启动时间和资源消耗。

2. 优化PHP-FPM进程池配置

PHP-FPM的进程管理策略,直接决定了内存占用水平。核心配置文件在 /etc/php/{版本}/fpm/pool.d/www.conf,以下参数需要根据服务器实际情况调整:

  • pm.max_children:最大子进程数。计算公式很简单:(服务器总内存 - 系统预留内存) / 单个PHP进程平均内存。比如8GB内存的服务器,系统预留2GB,单个进程平均100MB,那建议设为 (8192-2048)/100≈61(取整)。单个进程平均内存可以通过 ps -ylC php-fpm --sort:rss 查看RSS列,单位是KB;
  • pm.start_servers:启动时的子进程数,建议设为 pm.max_children 的1/4~1/2。上例中15~30比较合适;
  • pm.min_spare_servers / pm.max_spare_servers:空闲进程的最小/最大数量,同样建议设为1/4~1/2,避免频繁创建销毁进程带来的开销;
  • pm.max_requests_per_child:每个子进程处理的最大请求数(比如1000~5000)。这个参数很关键——即使代码没有内存泄漏,长期运行的进程也会因缓存累积而膨胀。设置后,子进程处理完指定请求数就会自动重启,有效防止内存持续增长。

3. 启用并配置OPcache

OPcache是PHP的字节码缓存,能避免重复编译PHP脚本,既减少内存占用又提升性能。Ubuntu系统默认包含OPcache,只需在 /etc/php/{版本}/fpm/php.ini 中取消注释或添加以下配置:

zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128; 缓存内存大小(MB),根据服务器内存调整(如128~512MB)
opcache.interned_strings_buffer=8; 内部字符串缓存大小(MB)
opcache.max_accelerated_files=10000; 缓存的脚本文件数量
opcache.revalidate_freq=60; 脚本检查更新频率(秒)

配置完成后,创建一个 phpinfo.php 文件(内容为 ),访问后查看“opcache”部分是否显示“enabled”即可确认。

4. 优化PHP代码

代码层面的内存泄漏或资源滥用,才是内存占用的根本原因。可以借助性能分析工具(如Xdebug、Blackfire)定位内存消耗高的函数或循环——比如未释放的大数组、无限递归、重复加载大型文件。另外,务必确保数据库连接、文件句柄等资源在使用后及时关闭(mysqli_close()fclose()),避免全局变量长期持有大量数据。循环和递归也要优化,能用迭代就别用递归,比如用 while 替代递归函数会友好得多。

5. 关闭不必要的PHP扩展

每个PHP扩展都会增加内存开销。编辑 php.ini,找到 Dynamic Extensions 部分,注释掉那些项目未使用的扩展(比如 extension=gd.soextension=mbstring.so,如果项目不需要图片处理或多字节字符串功能)。改完后重启PHP-FPM:sudo systemctl restart php{版本}-fpm

6. 升级PHP版本

新版PHP通常包含内存管理优化和性能提升,比如PHP 8.x相比PHP 7.x在内存占用上有明显下降。升级前别忘了备份项目代码和数据库,参考Ubuntu官方文档操作即可。

7. 监控与持续优化

  • 实时监控:用 htopglances 等工具随时查看内存使用情况,发现异常立刻定位;
  • 日志分析:定期检查PHP-FPM日志(/var/log/php{版本}-fpm.log)和慢日志(需开启 slowlog 参数),从中找出内存占用高的请求或代码;
  • 负载均衡:如果单台服务器实在扛不住流量,可以考虑用Nginx负载均衡,把请求分发到多台PHP-FPM服务器,减轻单机压力。

通过以上步骤,一般都能把Ubuntu下PHP-FPM的内存占用压下来。当然,具体参数还得根据实际服务器配置和应用场景微调,切忌盲目照搬,否则可能资源浪费或服务不稳定。

本文转载于:https://www.yisu.com/ask/12229066.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注