禁用或停止未使用的系统服务(如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
进行性能剖析,找出内存瓶颈(如某个函数占用过多内存)。