PHP的内存使用首先通过php.ini配置文件控制,需根据应用场景调整关键参数:
memory_limit = 128M或256M),需平衡应用需求与服务器资源。若使用PHP-FPM,还需修改/etc/php/{版本号}/fpm/pool.d/www.conf中的php_admin_value[memory_limit],确保两者一致。zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # OPcache缓存大小(MB,根据服务器内存调整)
opcache.interned_strings_buffer=8 # 内部字符串缓存大小
opcache.max_accelerated_files=4000 # 最大加速文件数
opcache.revalidate_freq=60 # 文件检查频率(秒)
这些设置可显著提升PHP执行效率,减少内存占用。若使用PHP-FPM(FastCGI进程管理器),需调整进程池参数以控制内存分配:
pm.max_children = 50),避免过多进程占用内存。建议值为(服务器总内存 - 系统预留内存) / 单个PHP进程内存(可通过ps aux | grep php-fpm查看单个进程内存)。pm.start_servers = 5、pm.min_spare_servers = 5、pm.max_spare_servers = 35),确保快速响应请求的同时,避免进程过多导致内存浪费。unset()函数释放不再需要的变量(如大型数组、数据库查询结果),尤其在循环或处理大数据时。mysqli_fetch_assoc)或数据库分页(如LIMIT offset, size)。yield关键字按需生成数据,而非一次性加载整个数据集(如处理大型文件或数据库查询),大幅降低内存占用。SplFixedArray(固定大小的数组)替代普通数组。for循环(比foreach更高效);递归函数需设置终止条件,避免过深递归导致栈溢出。memory_get_usage()(当前内存使用量)和memory_get_peak_usage()(峰值内存使用量)监控脚本内存消耗,定位高内存代码段。sudo fallocate -l 2G /swapfile、sudo mkswap /swapfile、sudo swapon /swapfile),防止内存耗尽导致系统崩溃。systemctl list-unit-files --type=service查看并关闭非必需服务(如旧版数据库、未使用的守护进程),释放系统内存。/etc/sysctl.conf中的vm.swappiness(如vm.swappiness=10,降低系统使用Swap的倾向),提升内存管理效率。以上策略需结合应用场景调整(如高并发Web应用需侧重OPcache和PHP-FPM配置,大数据处理应用需侧重代码分批处理),并在修改配置后重启相关服务(如systemctl restart apache2或systemctl restart php{版本号}-fpm)使更改生效。