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.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
重啟PHP-FPM(systemctl restart php8.2-fpm
)使配置生效。/etc/php/8.2/fpm/pool.d/www.conf
,調整進程管理參數:listen = /var/run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50 # 根據服務器內存調整(如4GB內存可設為50)
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
重啟PHP-FPM使配置生效。3. Laravel框架自身優化
.env
文件,設置APP_ENV=production
、APP_DEBUG=false
,禁用調試模式以減少不必要的性能開銷。php artisan config:cache
php artisan route:cache
php artisan view:cache
(注:開發環境禁用此功能,避免配置修改不生效。)--optimize-autoloader
生成更高效的自動加載文件,減少類加載時間:composer install --optimize-autoloader --no-dev
生產環境部署時務必添加--no-dev
排除開發依賴。4. 數據庫性能優化
EXPLAIN
分析慢查詢,為WHERE
、JOIN
、ORDER BY
等關鍵字段添加索引(如Schema::table('users')->index('email')
);避免SELECT *
,只查詢所需字段;使用with()
預加載關聯數據,解決N+1查詢問題(如User::with('posts')->get()
)。/etc/mysql/mysql.conf.d/mysqld.cnf
,優化InnoDB緩沖池(占內存70%-80%)、日志文件大小等參數:[mysqld]
innodb_buffer_pool_size = 4G # 根據服務器內存調整(如8GB內存設為4G)
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2 # 平衡性能與數據安全性(生產環境建議設為1)
query_cache_size = 64M
query_cache_type = 1
重啟MySQL(systemctl restart mysql
)使配置生效。CACHE_DRIVER=redis
、SESSION_DRIVER=redis
),緩存頻繁訪問的查詢結果(如熱門文章、配置信息),降低數據庫負載。5. 隊列與異步處理
QUEUE_CONNECTION=redis
),創建作業類(php artisan make:job ProcessPodcast
),并通過dispatch()
分發任務。/etc/supervisor/conf.d/laravel-worker.conf
,配置command=php /var/www/laravel/artisan queue:work redis --tries=3
,并設置autostart=true
、autorestart=true
)。6. Web服務器配置優化
try_files
指令將請求轉發給PHP-FPM:server {
listen 80;
server_name example.com;
root /var/www/laravel/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
測試配置(nginx -t
)后重啟Nginx(systemctl restart nginx
)。gzip on; gzip_types text/plain text/css application/json application/javascript;
,減少傳輸數據量,提升頁面加載速度。7. 高級性能加速工具
composer require laravel/octane
php artisan octane:start --server=swoole
配置Nginx反向代理到Octane(如fastcgi_pass http://127.0.0.1:8000
)。composer require laravel/telescope
);Blackfire用于深度性能分析(composer require blackfire/blackfire
),定位代碼瓶頸(如慢查詢、內存泄漏)。