OPcache是提升PHP執行效率的關鍵擴展,可緩存編譯后的PHP腳本,避免重復解析。在php.ini
中添加/修改以下配置:
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 緩存內存大?。∕B),根據服務器內存調整
opcache.interned_strings_buffer=8 # 內部字符串緩沖區大小
opcache.max_accelerated_files=4000 # 最大加速文件數
opcache.revalidate_freq=60 # 文件檢查頻率(秒)
重啟PHP-FPM使配置生效:systemctl restart php-fpm
。
根據服務器資源(內存、CPU核心數)優化PHP-FPM進程管理,避免進程過多或過少導致資源浪費。示例配置(/etc/php-fpm.d/www.conf
):
pm = dynamic # 動態進程管理模式
pm.max_children = 50 # 最大子進程數(建議:內存MB/20,如1GB內存設為50)
pm.start_servers = 5 # 啟動時的進程數
pm.min_spare_servers = 5 # 最小空閑進程數
pm.max_spare_servers = 35 # 最大空閑進程數
重啟PHP-FPM:systemctl restart php-fpm
。
調整內核參數提升網絡和內存性能,編輯/etc/sysctl.conf
:
net.ipv4.tcp_tw_reuse = 1 # 復用TIME-WAIT連接
net.ipv4.tcp_fin_timeout = 30 # TIME-WAIT超時時間(秒)
vm.swappiness = 10 # 減少內存交換(值越小越優先使用物理內存)
應用配置:sysctl -p
。
WHERE
、JOIN
字段)、排序(ORDER BY
)和分組(GROUP BY
)字段創建索引,避免全表掃描。SELECT *
:只查詢需要的列,減少數據傳輸量。mysql.connector.pooling
)復用數據庫連接,減少連接建立/關閉的開銷。slow_query_log=1
),使用EXPLAIN
分析執行計劃,優化低效SQL(如缺少索引、全表掃描)。啟用MySQL查詢緩存(query_cache_type=1
)或使用Redis/Memcached作為應用層緩存,緩存頻繁訪問的數據庫查詢結果(如商品分類、用戶信息),減少數據庫負載。
配置ThinkPHP的緩存機制,緩存配置、路由、頁面等數據,減少重復計算和數據庫查詢。示例配置(config/cache.php
):
return [
'default' => 'redis', // 使用Redis作為緩存驅動
'stores' => [
'redis' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 0,
'timeout' => 0,
'persistent' => false,
'prefix' => 'tp6:', // 緩存前綴
],
],
];
開啟路由緩存(config/route.php
):
'route_check_cache' => true, // 開啟路由檢查緩存
開啟配置緩存(命令行):
php think optimize:config # 生成配置緩存文件
with
(預加載)代替foreach
中的find
,解決N+1查詢問題。示例:$users = User::with('posts')->select(); // 一次性獲取用戶及關聯的文章
Db::name('user')->insertAll($dataList); // 批量插入
server {
listen 80;
server_name yourdomain.com;
root /www/wwwroot/yourproject/public;
location / {
try_files $uri $uri/ /index.php?s=$uri&$args; # ThinkPHP URL重寫
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # PHP-FPM地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 開啟GZIP壓縮
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
將靜態資源(圖片、CSS、JS、字體)上傳至CDN(內容分發網絡),利用CDN節點緩存資源,減少服務器帶寬壓力和響應時間。
使用Nginx或HAProxy實現負載均衡,將請求分發到多臺服務器,提升系統并發處理能力。示例Nginx負載均衡配置:
upstream thinkphp_servers {
server 192.168.1.101:80;
server 192.168.1.102:80;
server 192.168.1.103:80;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://thinkphp_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
使用Prometheus+Grafana監控服務器(CPU、內存、磁盤、網絡)和應用(QPS、響應時間、錯誤率)指標,及時發現性能瓶頸。
debug
級別日志),減少日志寫入開銷。示例配置(config/log.php
):return [
'default' => 'file',
'channels' => [
'file' => [
'type' => 'file',
'path' => LOG_PATH,
'level' => ['error'], // 僅記錄錯誤日志
'apart_level'=> [],
'max_files' => 30, // 保留30天日志
],
],
];
runtime
目錄下的緩存文件(如runtime/cache
、runtime/temp
)。