ubuntu php-fpm内存占用高怎么办
导读:1. 排查内存占用根源 首先需要明确内存占用高的具体原因,常用命令: 查看进程内存占用排序:top(按M键按内存排序)或ps -ylC php-fpm --sort:rss(按RSS内存排序),确认php-fpm进程是否为内存消耗主力;...
1. 排查内存占用根源
首先需要明确内存占用高的具体原因,常用命令:
- 查看进程内存占用排序:
top
(按M
键按内存排序)或ps -ylC php-fpm --sort:rss
(按RSS内存排序),确认php-fpm进程是否为内存消耗主力; - 计算平均进程内存:
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") } '
,了解单个进程的平均内存占用(如1GB内存服务器中,若平均每个进程占60M,则pm.max_children
不宜超过15); - 检查慢请求:查看php-fpm慢日志(通常位于
/var/log/php-fpm/www-slow.log
),定位执行时间过长的脚本(如数据库查询慢、代码逻辑问题),这些问题会导致进程长时间占用内存。
2. 优化php-fpm进程配置
根据服务器内存和CPU核心数调整/etc/php/{
version}
/fpm/pool.d/www.conf
中的进程管理参数:
pm
模式选择:- 小内存服务器(≤2GB):推荐
ondemand
(按需创建进程,闲置时自动回收)或dynamic
(动态调整进程数); - 大内存服务器(≥4GB):推荐
static
(固定进程数,减少进程创建/销毁的开销)。
- 小内存服务器(≤2GB):推荐
- 核心参数调整:
pm.max_children
:最大子进程数,计算公式为服务器内存(MB)× 0.7 / 单个进程平均内存(MB)
(如1GB内存、平均进程60M,则设置为1024×0.7/60≈12
),避免过多进程占满内存;pm.start_servers
:启动时的进程数,建议设置为CPU核心数×2
(如4核CPU设置为8);pm.min_spare_servers
/pm.max_spare_servers
:空闲进程的最小/最大数量,建议设置为CPU核心数×1
~CPU核心数×2
(如4核CPU设置为4~8),避免频繁创建/销毁进程;pm.max_requests
:单个进程处理的最大请求数(如500~1000),达到后自动重启进程,释放内存(解决内存泄漏或未释放问题)。
3. 启用并优化OPcache
OPcache可缓存编译后的PHP脚本,减少重复编译的内存消耗,显著提升性能:
- 确认OPcache是否启用:检查
php.ini
(/etc/php/{ version} /fpm/php.ini
)中opcache.enable=1
(开启); - 调整OPcache参数:
opcache.memory_consumption
:缓存大小(如128M
,根据服务器内存调整);opcache.interned_strings_buffer
:字符串缓存(如32M
);opcache.max_accelerated_files
:缓存的脚本文件数量(如10000
);opcache.validate_timestamps
:生产环境设置为0
(关闭文件时间戳验证,减少IO开销)。
4. 清理不必要的PHP扩展
禁用未使用的PHP扩展,减少内存占用:
- 编辑
php.ini
(/etc/php/{ version} /fpm/php.ini
),注释掉不需要的扩展(如xdebug
、gd
(若未使用图片处理)),例如:; zend_extension=xdebug.so ; extension=gd.so
- 重启php-fpm使更改生效:
sudo systemctl restart php{ version} -fpm
(如php7.4-fpm
)。
5. 调整系统内存管理参数
若系统存在大量缓存占用,可调整内核参数加快缓存回收:
- 查看系统内存阈值:
grep -E "low|high" /proc/zoneinfo
,计算low
值的3倍(单位为页,1页=4KB),即为系统内存临界值; - 设置最小空闲内存:
sudo sysctl -w vm.min_free_kbytes=524200
(设置为512M,防止系统内存耗尽); - 加快缓存回收:
sudo sysctl -w vm.vfs_cache_pressure=130
(默认100,值越大回收越快,建议设置为100~200)。
6. 升级PHP版本
新版本PHP通常包含性能优化和内存管理改进(如PHP 8.x比PHP 7.x内存占用更低、执行更快),建议升级到最新的稳定版本(如PHP 8.3):
- 使用
apt
升级:sudo apt update & & sudo apt install php{ version} -fpm
(如php8.3-fpm
); - 升级后重启php-fpm:
sudo systemctl restart php{ version} -fpm
。
7. 监控与持续优化
使用工具定期监控内存使用情况,及时发现问题:
- 实时监控:
htop
(按M
键按内存排序)、glances
(sudo apt install glances
,按m
键查看内存); - 日志分析:定期检查php-fpm错误日志(
/var/log/php-fpm/error.log
)和慢日志,定位内存泄漏或性能瓶颈; - 长期监控:使用Prometheus+Grafana搭建监控系统,跟踪内存使用趋势。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu php-fpm内存占用高怎么办
本文地址: https://pptw.com/jishu/715649.html