Ubuntu PHP-FPM内存管理策略围绕进程池优化、内存限制、缓存加速、监控调优四大核心展开,旨在平衡性能与资源占用,避免内存泄漏或过度消耗。
进程池是PHP-FPM内存管理的核心,通过合理设置进程数量参数,可适应不同负载需求,避免进程过多或过少导致的资源浪费。
dynamic(默认):根据负载动态增减进程,适合大多数场景;ondemand:按需启动进程(空闲时几乎不占用内存),适合小内存服务器(如512MB以下);static:固定进程数(pm.max_children即实际运行进程数),适合内存充足且负载稳定的环境。pm.max_children:最大子进程数,需根据服务器内存和单个脚本内存限制计算(公式:可用内存 / 单个脚本内存限制(如128M),再预留20%缓冲);pm.start_servers:启动时的进程数,建议设置为pm.max_children的1/4~1/3;pm.min_spare_servers/pm.max_spare_servers:空闲进程的最小/最大数量,保持合理范围可避免频繁创建/销毁进程(如min_spare_servers=5、max_spare_servers=35);pm.max_requests:每个子进程处理的最大请求数(如500),达到后自动重启,防止内存泄漏累积。通过限制单个PHP脚本及进程的内存使用,可有效防止单个脚本占用过多内存导致系统崩溃。
php.ini中的memory_limit参数(如memory_limit = 128M),根据应用需求调整(如WordPress建议128-256M,简单脚本可设为64M)。/etc/php/7.x/fpm/pool.d/www.conf)中,通过php_admin_value[memory_limit]覆盖全局设置(如php_admin_value[memory_limit] = 128M),适用于需要更严格控制的场景。OPcache通过缓存PHP脚本的字节码,避免每次请求都重新编译,显著降低内存使用并提升性能。
sudo apt install php-opcache;php.ini,开启并调整参数:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 ; 缓存内存大小(MB,根据服务器内存调整)
opcache.interned_strings_buffer=8 ; 内部字符串缓存大小
opcache.max_accelerated_files=4000 ; 最大加速文件数
opcache.revalidate_freq=60 ; 文件检查频率(秒)
```。
定期监控内存使用情况,结合日志分析,可及时发现内存泄漏或配置不合理的问题。
top、htop(按M键按内存排序);sudo systemctl status php-fpm或sudo php-fpm -t;free -h、vmstat 1。/var/log/php-fpm/error.log、/var/log/php-fpm/www-error.log),查找内存泄漏线索(如频繁重启的进程、异常大的内存占用)。gc_enable()手动触发)。sudo systemctl restart php-fpm)。--memory参数限制内存使用,避免影响宿主机。