温馨提示×

ubuntu php如何降低内存占用

小樊
47
2026-10-04 10:11:48
栏目: 编程语言

在 Ubuntu 上运行 PHP(无论是 CLI、FPM 还是 Apache 模式)时,降低内存占用可以从系统配置、PHP 配置、代码优化、运行模式几个方面入手。下面按实用性从高到低说明。


一、调整 PHP 自身配置(最直接)

1. 降低 memory_limit

编辑 php.ini(位置取决于运行方式):

# PHP-FPM
/etc/php/8.x/fpm/php.ini

# CLI
/etc/php/8.x/cli/php.ini

修改:

memory_limit = 128M
; 或更小,如 64M(视业务而定)

⚠️ 不要设太小,否则脚本会报 Allowed memory size exhausted

查看当前值:

php -i | grep memory_limit

2. 减少 PHP-FPM 子进程数(非常关键)

如果是网站(PHP-FPM),内存主要耗在进程数上。

编辑:

/etc/php/8.x/fpm/pool.d/www.conf

重点参数:

pm = dynamic
pm.max_children = 20        # 根据内存算
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 8

公式参考:

max_children ≈ 总内存 / 单个PHP进程内存

例如:

  • 服务器 1G 内存
  • 每个 PHP 进程约 40MB
  • max_children ≈ 20(保守 15)

查看单进程内存:

ps -ylC php-fpm --sort:rss

二、关闭不必要的 PHP 模块

查看已加载模块

php -m

禁用不用的扩展

Ubuntu 下:

phpdismod <模块名>

常见可关的(如不用):

  • xdebug(生产环境必须关)
  • grpc
  • mqtt
  • redis(不用时)

重启:

systemctl restart php8.x-fpm

三、使用 OPcache(反而更省内存)

听起来矛盾,但 OPcache 能减少重复编译,长期更省内存。

apt install php-opcache

php.ini:

opcache.enable=1
opcache.memory_consumption=64
opcache.max_accelerated_files=4000

四、代码层面优化(根本解决)

1. 避免一次性读大文件

❌ 错误:

$content = file_get_contents('big.log');

✅ 正确:

$fp = fopen('big.log', 'r');
while ($line = fgets($fp)) {
    // 处理
}

2. 及时释放大变量

unset($bigArray);
gc_collect_cycles();

3. 减少全局变量和静态变量


五、CLI 脚本特别优化

如果是命令行 PHP:

php -d memory_limit=64M script.php

或在脚本顶部:

ini_set('memory_limit', '64M');

六、换个更轻量的运行方式(进阶)

  • Swoole / Workerman:长驻内存,比 FPM 更省
  • PHP-CLI + 队列:避免 Web 请求占用 FPM

七、系统层面

1. 加 Swap(应急)

fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

2. 限制服务内存(systemd)

[Service]
MemoryLimit=512M

快速检查清单 ✅

  • [ ] memory_limit 合理
  • [ ] pm.max_children 不过高
  • [ ] xdebug 已关闭
  • [ ] OPcache 已开启
  • [ ] 大文件分块处理
  • [ ] 不用的扩展已禁用

如果你愿意,可以告诉我:

  • PHP 版本(7.x / 8.x)
  • 运行方式(FPM / CLI / Apache)
  • 服务器内存大小

我可以帮你算一套具体配置参数。

0 踩