CentOS环境下PHP内存优化技巧
Opcache通过缓存编译后的PHP脚本字节码,避免重复解析,显著减少内存消耗并提升执行效率。
php-opcache(适用于PHP 5.5+版本):sudo yum install php-opcache  php.ini(路径可通过php --ini确认),添加或修改以下配置:[opcache] zend_extension=opcache.so opcache.enable=1 opcache.enable_cli=0 # CLI模式下无需开启 opcache.memory_consumption=128 # 缓存内存大小(MB),根据服务器内存调整 opcache.interned_strings_buffer=8 # 内部字符串缓存大小(MB) opcache.max_accelerated_files=4000 # 缓存文件数量上限(需覆盖项目主要文件) opcache.revalidate_freq=60 # 文件修改后重新验证间隔(秒) opcache.fast_shutdown=1 # 快速关闭机制,释放内存更快  sudo systemctl restart php-fpm  通过调整核心参数,限制脚本内存使用并减少不必要的开销:
memory_limit(如普通应用256M,大型应用512M),避免单个脚本占用过多内存:memory_limit = 256M  post_max_size和upload_max_filesize(如64M),减少内存峰值:post_max_size = 64M upload_max_filesize = 64M  通过编写高效代码,从根源减少内存占用:
unset()销毁不再需要的变量(如大型数组、数据库结果集),释放内存:$data = fetchLargeData(); // 获取大型数据 processData($data); unset($data); // 释放内存  PDO::FETCH_ASSOC或fetch_row()逐行读取数据库结果,避免一次性加载全部数据到内存:$stmt = $pdo->query("SELECT * FROM large_table"); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { // 处理单行数据 }  yield关键字逐个返回数据,而非一次性生成整个数组,大幅降低内存消耗(适用于大型数据集):function getLargeDataSet() { for ($i = 0; $i < 1000000; $i++) { yield $i; // 逐个生成数据项 } } foreach (getLargeDataSet() as $item) { // 处理每个数据项 }  若使用PHP-FPM(常用PHP进程管理器),需优化其内存分配策略:
www.conf(路径通常为/etc/php-fpm.d/www.conf),调整php_admin_value[memory_limit](需与php.ini中的memory_limit一致):php_admin_value[memory_limit] = 256M  pm.max_children(如4核8G内存可设置为20-30),避免过多进程占用内存:pm.max_children = 20  通过工具监控内存使用,定位瓶颈并针对性调整:
top、htop或free -m命令查看内存占用情况,重点关注PHP进程的内存使用量。memory_get_usage()和memory_get_peak_usage()函数输出脚本内存使用情况,识别高内存消耗的代码段:echo "当前内存使用:" . memory_get_usage() / 1024 / 1024 . " MB"; echo "峰值内存使用:" . memory_get_peak_usage() / 1024 / 1024 . " MB";