硬件是LNMP架構的基石,需根據業務規模選擇合適的配置:
操作系統配置直接影響資源利用率,需重點調整以下參數:
numactl命令關閉);noatime選項(減少文件訪問時間記錄);/etc/sysctl.conf優化TCP/IP棧與內存管理,關鍵參數包括:
vm.swappiness=10(降低swap使用率,優先使用物理內存);vm.dirty_background_ratio=10、vm.dirty_ratio=20(控制臟頁刷新閾值,平衡寫入性能與數據安全性);net.ipv4.tcp_tw_reuse=1、net.ipv4.tcp_fin_timeout=30(復用TIME_WAIT連接,減少連接建立開銷)。Nginx作為前端Web服務器,需聚焦并發處理與響應效率:
worker_processes auto;(自動匹配CPU核心數);worker_connections 1024;(每個進程最大并發連接數,可根據內存調整至2048或更高);gzip on;(壓縮響應內容,建議開啟gzip_types text/plain text/css application/json application/javascript;,壓縮率可達50%-70%);配置靜態資源緩存(如location ~* \.(jpg|jpeg|png|gif)$ { expires 30d; add_header Cache-Control "public"; }),降低回源請求次數;location指令匹配),避免轉發至PHP-FPM,減少資源消耗;keepalive_timeout 65; keepalive_requests 100000;(保持連接復用,減少TCP握手開銷)。數據庫是性能瓶頸的高發區,需重點優化緩沖池與查詢效率:
innodb_buffer_pool_size為服務器總內存的50%-80%(如16GB內存可設置為8GB-12GB),用于緩存數據與索引,減少磁盤I/O;max_connections為預期并發連接數的1.2-1.5倍(如預計1000并發,設置為1200-1500),避免連接過多導致資源耗盡;優化SQL語句(避免SELECT *、使用索引、用EXPLAIN分析查詢),減少全表掃描;slow_query_log=1,設置long_query_time=2(記錄執行時間超過2秒的查詢),定期分析并優化慢查詢;log-bin=mysql-bin、server-id=1),分擔讀請求(將讀操作指向從庫),提升整體吞吐量。PHP作為動態腳本語言,需通過緩存與進程管理提升執行效率:
php.ini中添加zend_extension=opcache.so,并設置opcache.enable=1、opcache.memory_consumption=128(緩存內存大?。?、opcache.max_accelerated_files=4000(緩存的文件數量)、opcache.jit=on(啟用JIT編譯,進一步提升性能),緩存預編譯的PHP字節碼,減少代碼解析和編譯開銷;pm.max_children(最大子進程數,如pm.max_children = (總內存 - MySQL內存) / 單個PHP進程內存)、pm.start_servers(啟動時的子進程數)、pm.min_spare_servers(最小空閑進程數)、pm.max_spare_servers(最大空閑進程數),平衡進程數量與資源消耗;ulimit -n 65535提高系統文件描述符限制(默認值較低,無法滿足高并發需求),并在/etc/security/limits.conf中永久設置(如* soft nofile 65535、* hard nofile 65535);vm.swappiness(如設置為10)、vm.dirty_background_ratio(如設置為10)、vm.dirty_ratio(如設置為20),優化內存與磁盤的IO負載;net.core.somaxconn=65535(監聽隊列長度,避免連接被拒絕)、net.ipv4.tcp_max_syn_backlog=65535(SYN隊列長度,應對高并發連接請求)、net.ipv4.tcp_fastopen=3(啟用TCP Fast Open,減少握手延遲)。ab)、wrk等工具進行壓力測試(如ab -n 1000 -c 100 http://your_server_ip/),模擬高并發場景,驗證優化效果并指導進一步調整;mysqldump)和重要文件(如網站數據),防止數據丟失;可使用增量備份(如xtrabackup)減少備份時間。