在 Ubuntu 上运行 PHP(无论是 CLI、FPM 还是 Apache 模式)时,降低内存占用可以从系统配置、PHP 配置、代码优化、运行模式几个方面入手。下面按实用性从高到低说明。
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
如果是网站(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进程内存
例如:
查看单进程内存:
ps -ylC php-fpm --sort:rss
php -m
Ubuntu 下:
phpdismod <模块名>
常见可关的(如不用):
xdebug(生产环境必须关)grpcmqttredis(不用时)重启:
systemctl restart php8.x-fpm
听起来矛盾,但 OPcache 能减少重复编译,长期更省内存。
apt install php-opcache
php.ini:
opcache.enable=1
opcache.memory_consumption=64
opcache.max_accelerated_files=4000
❌ 错误:
$content = file_get_contents('big.log');
✅ 正确:
$fp = fopen('big.log', 'r');
while ($line = fgets($fp)) {
// 处理
}
unset($bigArray);
gc_collect_cycles();
如果是命令行 PHP:
php -d memory_limit=64M script.php
或在脚本顶部:
ini_set('memory_limit', '64M');
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
[Service]
MemoryLimit=512M
如果你愿意,可以告诉我:
我可以帮你算一套具体配置参数。