系统级基础优化
yum update命令更新CentOS系统及已安装的软件包(如Nginx、PHP、Laravel),获取最新的性能改进与安全补丁,避免因版本滞后导致的性能瓶颈。/etc/sysctl.conf文件,添加或修改以下参数以优化网络性能(如减少TIME_WAIT连接、提高端口复用率):net.ipv4.tcp_tw_reuse=1、net.ipv4.tcp_tw_recycle=1、net.ipv4.tcp_fin_timeout=30、net.core.somaxconn=1024;执行sudo sysctl -p使配置生效。PHP与Web服务器配置优化
php.ini文件,添加以下关键配置:opcache.enable=1(启用OPcache)、opcache.memory_consumption=512M(分配缓存内存)、opcache.interned_strings_buffer=64M(优化字符串存储)、opcache.max_accelerated_files=10000(设置最大加速文件数)、opcache.revalidate_freq=60(每60秒检查文件更新);重启PHP-FPM(systemctl restart php-fpm)使配置生效。/etc/php-fpm.d/www.conf文件,调整进程管理参数以适应服务器资源(如4核8G服务器可设置pm.max_children=20、pm.start_servers=5、pm.min_spare_servers=5、pm.max_spare_servers=10);将listen指令改为Unix socket(listen = /var/run/php-fpm/php-fpm.sock),减少网络开销;重启PHP-FPM服务。server {
listen 80;
server_name yourdomain.com;
root /path/to/laravel/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string; # 路由转发
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; # 连接PHP-FPM
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(jpg|css|js)$ {
expires 30d; # 静态资源缓存30天
add_header Cache-Control "public";
}
}
Laravel应用层优化
php artisan route:cache(生成路由缓存,减少路由解析时间)和php artisan config:cache(合并配置文件,避免重复读取),仅在生产环境使用。.env文件,设置CACHE_DRIVER=redis(或memcached),并配置config/cache.php中的连接信息(如Redis主机、端口);Redis相比文件缓存速度更快,适合生产环境。Cache门面缓存频繁访问的数据库查询结果(如Cache::remember('popular_posts', 60, function () { return Post::popular()->get(); })),减少数据库负载。with方法预加载关联数据,避免N+1查询问题(如User::with('posts')->get()代替User::get()->each->posts)。users.email、orders.user_id)添加索引,使用php artisan make:migration add_index_to_users_email --table=users创建迁移文件,执行ALTER TABLE users ADD INDEX (email);。paginate()方法代替get(),限制每次查询的数据量(如Post::paginate(15)),避免一次性加载过多数据导致内存溢出。composer require predis/predis(或php-amqplib/php-amqplib用于RabbitMQ)。.env文件:QUEUE_CONNECTION=redis。php artisan make:job SendEmailJob,在handle方法中编写任务逻辑(如Mail::to($user->email)->send(new OrderConfirmation($user)))。SendEmailJob::dispatch($user)->onQueue('emails'),将任务推送到指定队列。php artisan queue:work --queue=emails --tries=3(--tries=3表示失败重试3次)。.env文件,设置APP_DEBUG=false,关闭调试模式。调试模式会记录详细错误信息、加载额外调试工具(如Debugbar),显著降低性能。select方法明确指定所需字段(如User::select('id', 'name')->get()代替select *),避免加载不必要的数据。load方法在需要时加载关联数据(如$user->load('posts')),避免在每次请求时自动加载所有关联数据。insert方法批量插入数据(如User::insert($usersData)),减少数据库交互次数(相比循环create,性能提升数倍)。监控与持续优化
composer require laravel/telescope)或New Relic,实时监控应用性能(如请求响应时间、数据库查询、队列状态),识别性能瓶颈(如慢查询、队列积压)。storage/framework/cache目录下的缓存文件(rm -rf storage/framework/cache/*)和storage/logs目录下的大日志文件(truncate -s 0 storage/logs/*.log),避免占用过多磁盘空间。