发布于2026-07-14 阅读(0)
扫一扫,手机访问
在Ubuntu服务器上跑PHP,最让人头疼的莫过于内存突然飙升,一个PHP-FPM进程就把整台机器拖垮。别慌,其实背后就那么几个原因,咱们一步步排查、优化,完全能搞定。
先搞清楚内存到底占了多少,别盲目猜。用下面几个命令,一分钟就能摸清底细:

top 命令,然后按 M 键按内存排序,直观看到PHP-FPM进程的占比;ps -fe | grep "php-fpm" | grep "pool" | wc -l;ps -ylC php-fpm --sort:rss,重点看RSS列,找出那些“吃内存大户”的启动时间和资源消耗。PHP-FPM的进程管理策略,直接决定了内存占用水平。核心配置文件在 /etc/php/{版本}/fpm/pool.d/www.conf,以下参数需要根据服务器实际情况调整:
(服务器总内存 - 系统预留内存) / 单个PHP进程平均内存。比如8GB内存的服务器,系统预留2GB,单个进程平均100MB,那建议设为 (8192-2048)/100≈61(取整)。单个进程平均内存可以通过 ps -ylC php-fpm --sort:rss 查看RSS列,单位是KB;pm.max_children 的1/4~1/2。上例中15~30比较合适;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”即可确认。
代码层面的内存泄漏或资源滥用,才是内存占用的根本原因。可以借助性能分析工具(如Xdebug、Blackfire)定位内存消耗高的函数或循环——比如未释放的大数组、无限递归、重复加载大型文件。另外,务必确保数据库连接、文件句柄等资源在使用后及时关闭(mysqli_close()、fclose()),避免全局变量长期持有大量数据。循环和递归也要优化,能用迭代就别用递归,比如用 while 替代递归函数会友好得多。
每个PHP扩展都会增加内存开销。编辑 php.ini,找到 Dynamic Extensions 部分,注释掉那些项目未使用的扩展(比如 extension=gd.so、extension=mbstring.so,如果项目不需要图片处理或多字节字符串功能)。改完后重启PHP-FPM:sudo systemctl restart php{版本}-fpm。
新版PHP通常包含内存管理优化和性能提升,比如PHP 8.x相比PHP 7.x在内存占用上有明显下降。升级前别忘了备份项目代码和数据库,参考Ubuntu官方文档操作即可。
htop、glances 等工具随时查看内存使用情况,发现异常立刻定位;/var/log/php{版本}-fpm.log)和慢日志(需开启 slowlog 参数),从中找出内存占用高的请求或代码;通过以上步骤,一般都能把Ubuntu下PHP-FPM的内存占用压下来。当然,具体参数还得根据实际服务器配置和应用场景微调,切忌盲目照搬,否则可能资源浪费或服务不稳定。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8