如何优化 PHP 内存限制(memory_limit)?Nginx + PHP-FPM 最佳实践
?Nginx-PHP-FPM-最佳实践-750x375.webp)
📌 前言
PHP 内存限制(memory_limit
)直接影响网站性能和稳定性。如果设置过低,可能导致 500 Internal Server Error
或 Allowed memory size exhausted
错误;设置过高,又可能耗尽服务器资源。
本文将详细介绍 如何合理调整 PHP 内存限制,适用于 Nginx + PHP-FPM 环境(如 WordPress、Laravel、WooCommerce 等),并针对 2GB 内存的 VPS 给出优化建议。
🔧 1. 如何检查当前 PHP 内存限制?
在终端运行:
php -i | grep memory_limit
或者在网站根目录创建 phpinfo.php
:
<?php phpinfo(); ?>
访问该文件,搜索 memory_limit
查看当前值。
⚙️ 2. 如何调整 PHP 内存限制?
✅ 方法 1:修改 php.ini
(全局生效)
- 找到
php.ini
文件:sudo nano /etc/php/8.x/fpm/php.ini # 替换 8.x 为你的 PHP 版本
- 修改
memory_limit
:memory_limit = 512M # 推荐值:256M-1G,视网站需求调整
- 重启 PHP-FPM:
sudo systemctl restart php8.x-fpm
✅ 方法 2:PHP-FPM 进程池配置(推荐)
适用于不同站点分配不同内存:
- 编辑 PHP-FPM 配置:
sudo nano /etc/php/8.x/fpm/pool.d/www.conf
- 添加或修改:
php_admin_value[memory_limit] = 512M
- 重启 PHP-FPM:
sudo systemctl restart php8.x-fpm
✅ 方法 3:Nginx 临时覆盖(适用于特定站点)
在 Nginx 的 server
配置中添加:
location ~ \.php$ { fastcgi_param PHP_VALUE "memory_limit=512M"; include fastcgi_params; }
然后重启 Nginx:
sudo systemctl restart nginx
📊 3. 如何监控 PHP 内存使用情况?
🔍 检查 PHP 内存峰值
创建 memory_test.php
:
<?php
echo "Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB";
访问该文件,查看实际内存占用,并调整 memory_limit
至 峰值 × 1.5。
📈 服务器内存监控
free -h # 查看剩余内存 htop # 监控进程内存占用
如果发现内存不足,需优化 PHP-FPM 进程数或降低 memory_limit
。
🚀 4. 高级优化(减少内存占用)
⚡ 启用 OPcache(加速 PHP 执行)
编辑 php.ini
:
opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000
重启 PHP-FPM:
sudo systemctl restart php8.x-fpm
⚡ 使用 Redis / Memcached 缓存
- WordPress:安装
Redis Object Cache
插件。 - Laravel:默认支持 Redis 缓存。
📌 5. 2GB VPS 推荐配置
网站类型 | 推荐 memory_limit | PHP-FPM pm.max_children |
---|---|---|
静态/小型网站 | 128M - 256M | 20 |
WordPress | 256M - 512M | 15 |
WooCommerce | 512M - 768M | 10 |
高性能应用 | 768M - 1G | 8 |
📢 关键原则:
- 不要设置
memory_limit
超过1G
(2GB VPS 容易内存耗尽)。 - 优先优化代码和缓存,而不是无限制增加内存。
❌ 6. 常见问题与解决方案
🔴 502 Bad Gateway(PHP-FPM 崩溃)
- 原因:PHP 内存不足或
max_children
设置过高。 - 解决:
- 降低
pm.max_children
。 - 增加
memory_limit
(如512M → 768M
)。
- 降低
🔴 网站变慢(内存耗尽)
- 检查:
journalctl -u php8.x-fpm -b # 查看 PHP-FPM 日志
- 优化:减少插件、优化数据库查询。
🎯 总结
- 普通网站:
256M - 512M
足够。 - 电商/高性能应用:
512M - 1G
,但需监控内存使用。 - 优化比增加内存更重要:启用 OPcache、Redis 缓存,优化代码。
如果你的网站仍有问题,欢迎在评论区留言,我会帮你分析! 🚀