1. 系统级基础优化
ulimit -n 65535临时设置,或编辑/etc/security/limits.conf永久生效(添加* soft nofile 65535; * hard nofile 65535)。/etc/sysctl.conf,添加net.core.somaxconn = 65535(最大连接队列长度)、net.ipv4.tcp_max_syn_backlog = 65535(SYN队列长度)、net.ipv4.tcp_tw_reuse = 1(复用TIME-WAIT连接),运行sysctl -p使配置生效。2. PHP与扩展优化
php.ini(如/etc/php/8.2/fpm/php.ini),设置:opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.enable_cli=1 # 允许CLI使用
/etc/php/8.2/fpm/pool.d/www.conf,调整进程管理为dynamic(动态调整进程数),设置:pm = dynamic
pm.max_children = 50 # 最大子进程数(根据服务器内存调整,每进程约消耗100MB内存)
pm.start_servers = 5 # 启动时的进程数
pm.min_spare_servers = 5 # 最小空闲进程数
pm.max_spare_servers = 35 # 最大空闲进程数
request_terminate_timeout = 30 # 请求超时时间(秒)
运行systemctl restart php8.2-fpm生效。3. Laravel框架配置优化
.env中设置APP_ENV=production和APP_DEBUG=false,禁用调试模式。运行以下Artisan命令缓存配置、路由和视图,减少每次请求的解析开销:php artisan config:cache
php artisan route:cache
php artisan view:cache
注意:开发环境不要启用缓存,否则修改配置后不会立即生效。
.env设置:CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
安装Redis扩展:composer require predis/predis(或phpredis扩展)。4. 数据库性能优化
users.email、orders.user_id)添加索引,使用Schema::table方法或在迁移文件中定义:Schema::table('users', function (Blueprint $table) {
$table->index(['email', 'created_at']); # 复合索引
});
with方法预加载关联数据,例如:$users = User::with('posts')->get(); // 一次性获取用户及关联的文章
使用DB::listen监听慢查询(如超过100ms),通过Laravel Telescope或日志分析优化:DB::listen(function ($query) {
Log::info($query->sql, $query->bindings, $query->time);
});
paginate()方法,避免一次性加载所有数据:$articles = Article::paginate(20); // 每页20条
5. 队列系统优化(处理耗时任务)
.env设置:QUEUE_CONNECTION=redis
sudo apt-get install supervisor,创建配置文件/etc/supervisor/conf.d/laravel-worker.conf:[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/laravel/artisan queue:work --sleep=3 --tries=3 --daemon
autostart=true
autorestart=true
user=www-data
numprocs=4 # 进程数(根据CPU核心数调整,如4核可设4)
redirect_stderr=true
stdout_logfile=/var/www/laravel/storage/logs/worker.log
运行以下命令启动Supervisor:sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
tries(重试次数,如3次)和timeout(超时时间,如30秒),避免长时间占用队列进程。对于高优先级任务,使用onQueue方法设置优先级:dispatch((new SendWelcomeEmail())->onQueue('high'));
6. 前端与静态资源优化
webpack.mix.js:mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css')
.version(); // 版本控制,避免缓存问题
运行npm run prod生成优化后的文件。gzip on;,压缩静态资源(如CSS、JS、HTML),减少传输大小:gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
expires头,让浏览器缓存文件,减少重复请求:location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public";
}
7. 监控与持续优化
error级别),避免记录过多调试信息,定期清理日志文件(如使用logrotate),防止日志过大占用磁盘空间。