with()
方法关联模型),避免循环中执行SQL;优化循环逻辑,减少不必要的条件判断和函数调用。EXPLAIN
分析慢查询,为常用查询字段添加索引;避免SELECT *
,只查询必要字段;使用批量操作(如insertAll()
)减少数据库连接开销。composer update
更新包版本,移除未使用的依赖包,减少资源占用。WHERE
、JOIN
、ORDER BY
等高频操作字段创建索引(如ALTER TABLE users ADD INDEX idx_username (username)
),但避免过度索引(会影响写入性能)。master
主库负责写入,slave
从库负责读取),减轻主库压力;可使用Db::connect()
配置多个数据源。Cache::set()
/Cache::get()
)或Redis/Memcached缓存,减少数据库访问次数。mod_php
模式,通过sudo apt install php-fpm
安装;编辑/etc/php/{version}/fpm/pool.d/www.conf
调整进程管理参数:pm = dynamic # 动态进程管理模式(推荐)
pm.max_children = 50 # 最大子进程数(根据服务器内存调整,如1GB内存约设30-50)
pm.start_servers = 5 # 启动时的进程数
pm.min_spare_servers = 5 # 最小空闲进程数
pm.max_spare_servers = 35 # 最大空闲进程数
request_terminate_timeout = 30s # 脚本超时时间(避免长时间占用资源)
php.ini
中取消以下注释或添加配置,缓存PHP字节码,提升脚本执行速度:zend_extension = opcache.so
opcache.enable = 1
opcache.memory_consumption = 128 # OPcache内存大小(MB,根据服务器调整)
opcache.max_accelerated_files = 4000 # 缓存文件数量(需覆盖项目文件总数)
opcache.revalidate_freq = 60 # 文件检查频率(秒,避免频繁重新编译)
/etc/nginx/sites-available/default
优化FastCGI参数:location ~ \.php$ {
fastcgi_pass unix:/run/php/php{version}-fpm.sock; # 根据PHP版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffers 16 16k; # 缓冲区大小
fastcgi_buffer_size 32k; # 缓冲区大小
}
config/cache.php
中设置多级缓存(如文件+Redis),提升缓存命中率:return [
'default' => 'multilevel',
'stores' => [
'file' => [
'type' => 'file',
'path' => runtime_path('cache'),
'prefix' => 'think',
],
'redis' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 0,
'expire' => 3600, // Redis缓存过期时间
],
],
'multilevel' => [
'driver' => 'multilevel',
'stores' => ['file', 'redis'], // 先查文件缓存,未命中则查Redis
],
];
Cache::tag()
给缓存打标签(如Cache::tag('user')->set('userInfo', $data)
),便于批量清除;使用Cache::lock()
防止缓存击穿(如高并发下重复查询数据库)。location ~* \.(jpg|jpeg|png|gif|css|js)$ {
expires 30d; # 缓存30天
access_log off;
add_header Cache-Control "public";
}
.env
文件中设置APP_DEBUG = false
,关闭调试信息(如错误堆栈),减少性能开销。ulimit -n 65535
增加文件描述符限制(避免大量并发连接报错);优化内核参数(如net.core.somaxconn = 65535
提升TCP连接队列长度)。sudo systemctl restart php{version}-fpm
)和Nginx(sudo systemctl restart nginx
),释放内存资源(避免内存泄漏)。htop
(实时查看CPU、内存占用)、vmstat
(监控系统性能)、iostat
(监控磁盘I/O)等工具定位瓶颈;通过ThinkPHP的Debug
工具(如think-whoops
)查看请求耗时。www.conf
中设置slowlog = /var/log/php-fpm/www-slow.log
和request_slowlog_timeout = 10s
),分析慢请求;查看Nginx访问日志(access.log
),统计高频请求路径。ab
(Apache Benchmark)或wrk
工具模拟高并发请求(如ab -n 1000 -c 100 http://example.com/
),评估优化效果并调整参数。