优化PHP代码以减少内存占用
unset()函数及时释放不再需要的变量(如大型数组、数据库连接),避免全局变量长期占用内存(全局变量直到脚本结束才释放)。处理完数据库连接、文件句柄等资源后,调用close()方法显式关闭。fread()分块读取文件、LIMIT分页查询数据库,或用生成器(yield)逐行处理数据,降低单次内存消耗。SplFixedArray代替普通数组)处理固定大小的列表。WeakReference类)打破循环;启用PHP垃圾回收(默认开启),定期调用gc_collect_cycles()手动触发垃圾回收,清理不可达对象。调整PHP配置参数
memory_limit参数(如从128M增加到256M或更高)。可通过命令行临时修改(php -d memory_limit=256M script.php),或在php.ini(/etc/php/{version}/cli/php.ini或/etc/php/{version}/fpm/php.ini)中永久修改,修改后重启PHP服务(sudo systemctl restart php{version}-fpm或sudo systemctl restart apache2/nginx)。php.ini,添加或修改以下参数:opcache.enable=1(启用)、opcache.memory_consumption=128(缓存内存大小,单位MB)、opcache.max_accelerated_files=4000(缓存的文件数量)、opcache.revalidate_freq=60(文件修改后重新编译的时间间隔,单位秒),重启PHP服务生效。/etc/php/{version}/fpm/pool.d/www.conf,优化以下参数:
pm.max_children:根据服务器内存计算(如服务器内存/单个脚本内存限制,如16GB内存、256M限制则设为60),避免进程数过多导致内存耗尽;pm.max_requests_per_child:设置每个子进程处理的最大请求数(如1000),超过后重启进程,防止内存泄漏累积;pm.start_servers、pm.min_spare_servers、pm.max_spare_servers:根据并发请求量调整空闲进程数,平衡性能与内存占用。使用工具检测与分析内存问题
xdebug.profiler_enable=1(启用分析)、xdebug.profiler_output_dir="/tmp"(输出目录),运行脚本后在/tmp查看分析文件;Blackfire提供可视化界面,直观展示内存分配情况。htop(实时查看进程内存占用)、glances(综合监控系统与进程)、free -m(查看系统内存使用情况)定期监控,及时发现内存异常增长。其他优化措施