CentOS下优化 ThinkPHP 内存使用的实用方案
一 基础环境优化
sudo yum install -y php-opcacheopcache.enable=1opcache.memory_consumption=128(按内存与项目规模调大到如256)opcache.interned_strings_buffer=8opcache.max_accelerated_files=10000opcache.revalidate_freq=60(生产环境建议较大,减少校验)opcache.validate_timestamps=0(配合部署流程使用,避免文件变更未同步)pm=dynamicpm.max_children=100(经验值:每进程约30–50MB,如8GB内存可粗略估算 8000/50≈160,保守取100)pm.start_servers=20pm.min_spare_servers=10pm.max_spare_servers=30pm.max_requests=500(预防长生命周期内存泄漏)request_terminate_timeout=30request_slowlog_timeout=5slowlog=/var/log/php-fpm/slow.logpm.status_path=/statusmemory_limit=128M(常规接口);批处理/导入导出可临时提升到256M–512M,并配合分批策略。二 ThinkPHP 框架层优化
.env 中设置:APP_DEBUG=falsephp think optimize:routephp think optimize:schemaRoute::get('new/:id','News/read')->cache(3600);with();必要时用 withJoin()->cache(30) 或 Cache::remember('key',3600,fn(){...})三 数据与任务层面优化
四 监控 定位与容量规划
top/htop/free/vmstat 观察内存与负载pm.max_requests 定期回收进程,避免长期运行累积内存碎片/泄漏validate_timestamps=0,变更代码后执行 php think optimize:route 并重启 PHP-FPM 以刷新缓存五 常见误区与建议
切忌“一调到底”把 memory_limit 设得过大(如 -1 或无限制),这只会掩盖问题并增加节点 OOM 风险;应优先做查询与代码优化、分批处理。
修改 post_max_size/upload_max_size 不能通过 ini_set() 生效,需在 php.ini 或 .htaccess(需 AllowOverride All)中设置;而 memory_limit 可用 ini_set() 在脚本内调整(生产不建议过大)。