禁用或停止未使用的系统服务(如bluetooth、cups等),减少后台进程对内存的占用。可通过systemctl list-unit-files --type=service查看服务状态,用systemctl disable <服务名>禁用非必需服务。
修改/etc/sysctl.conf文件,优化以下参数以提升内存使用效率:
vm.swappiness=10:降低系统使用交换分区(Swap)的倾向(值越低越优先使用物理内存);vm.dirty_ratio=10:控制脏页(未写入磁盘的内存页)占比,避免内存过度占用;net.core.somaxconn=1024:增加TCP连接队列长度,提升高并发下的内存处理能力。sysctl -p使配置生效。OPcache可缓存PHP脚本的字节码,避免重复编译,显著减少内存消耗。在php.ini中添加/修改以下配置:
opcache.enable=1
opcache.memory_consumption=128  # 缓存内存大小(MB,根据服务器内存调整)
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0  # 生产环境关闭文件时间戳验证,提升性能
修改后重启PHP服务(如systemctl restart php-fpm)。
根据应用实际需求修改php.ini中的memory_limit参数(如memory_limit = 256M),避免因默认值过低导致内存溢出。需注意:增加内存限制是临时解决方案,需结合代码优化使用。
调整/etc/php-fpm.conf或/etc/php-fpm.d/www.conf中的进程池参数,避免进程过多占用内存:
pm.max_children:根据服务器内存计算(如1GB内存可设为20-30,公式:可用内存/单个进程内存);pm.start_servers:启动时的进程数(建议设为pm.max_children的1/4);pm.min_spare_servers/pm.max_spare_servers:空闲进程的最小/最大数量(保持合理范围,避免频繁创建/销毁进程)。Cache::remember)存储到Redis或Memcached,避免重复查询;insertAll、updateAll替代循环中的单条插入/更新,减少数据库交互次数;Db::name('user')->field('id,name,email')->select()),减少数据传输量。WHERE、JOIN、ORDER BY的字段创建索引(如主键、外键、高频查询条件字段);slow_query_log=1),使用EXPLAIN命令分析执行计划,优化复杂查询(如避免子查询、拆分大查询);Swoole或Workerman实现数据库连接池,减少连接建立/关闭的开销。unset()释放不再使用的变量(尤其是大数组、数据库结果集);config/app.php中的app_debug设为false,避免框架记录过多调试信息;limit和offset分批次查询/处理数据(如Db::name('log')->limit(1000)->select()),避免一次性加载大量数据到内存。Nginx或ThinkPHP的gzip配置),减少传输数据量。用Nginx替代Apache,Nginx采用事件驱动架构,内存消耗更低,高并发处理能力更强。配置Nginx反向代理到PHP-FPM(如fastcgi_pass 127.0.0.1:9000;)。
使用ThinkPHP的最新稳定版本(如6.x),新版本通常包含性能改进、内存泄漏修复和优化的代码逻辑。
top、htop查看进程内存占用,free -h查看系统内存使用情况;error_log)和慢查询日志,定位内存消耗高的脚本或查询;Blackfire.io、Xdebug进行性能剖析,找出内存瓶颈(如某个函数占用过多内存)。