Ubuntu LAMP服務器性能優化指南
LAMP(Linux、Apache、MySQL、PHP)是常見的Web服務堆棧,優化其性能需從系統底層、組件配置、緩存策略、代碼質量等多維度入手,以下是具體優化措施:
systemctl disable <service_name>
命令關閉未使用的服務(如藍牙、打印服務等),釋放系統資源(CPU、內存),減少后臺進程對服務器性能的占用。mkfs
命令重新格式化磁盤(需備份數據),減少文件系統碎片化,提升磁盤I/O效率。/etc/sysctl.conf
文件,調整TCP連接參數(如net.core.somaxconn
設置為1024,增加監聽隊列長度)、文件描述符數量(如fs.file-max
設置為65535,允許更多并發連接),提升系統處理高并發的能力。prefork
模式(多進程)適合低并發場景,但內存消耗大;worker
(多進程多線程)或event
(事件驅動)模式適合高并發,能顯著降低內存占用。通過sudo a2dismod mpm_prefork && sudo a2enmod mpm_event
切換模式,并修改/etc/apache2/mods-enabled/mpm_event.conf
中的關鍵參數:
MaxRequestWorkers
:根據服務器內存設置(如每進程占用10MB,1GB內存可設為500),限制最大并發請求數,避免資源耗盡;MaxConnectionsPerChild
:設置為1000-5000,限制每個子進程處理的請求數,防止內存泄漏累積。/etc/apache2/apache2.conf
中設置KeepAlive On
,并調整KeepAliveTimeout
(如30秒)、MaxKeepAliveRequests
(如100),減少TCP連接建立的開銷(三次握手),提升頁面加載速度。sudo a2enmod deflate
啟用mod_deflate
模塊,在配置文件中添加AddOutputFilterByType DEFLATE text/html text/css application/javascript
,壓縮HTML、CSS、JS等文本文件(壓縮率可達50%-70%),減小傳輸數據量,提高頁面渲染速度。mod_cache
(如mod_cache_disk
)緩存靜態內容(圖片、CSS、JS),減少對后端PHP和MySQL的請求,提升響應速度。WHERE
、JOIN
子句中的列)創建索引(如CREATE INDEX idx_name ON users(username)
),避免全表掃描。使用EXPLAIN
命令分析查詢執行計劃,確認是否使用了索引。/etc/mysql/my.cnf
文件,優化內存分配:
innodb_buffer_pool_size
:設置為系統內存的50%-80%(如1GB內存設為768M),作為InnoDB引擎的緩存池,緩存數據和索引,減少磁盤I/O;query_cache_size
:若查詢重復率高(如靜態內容),可設置為64M-128M;若查詢變化頻繁(如電商訂單),建議設為0(避免緩存失效的開銷)。SELECT *
(只查詢需要的列)、子查詢(改用JOIN
)、臨時表(優化為臨時變量),減少數據庫的計算量和資源消耗。my.cnf
中設置slow_query_log = On
、long_query_time = 2
(超過2秒的查詢視為慢查詢),定期分析慢查詢日志(使用mysqldumpslow
工具),定位并優化性能瓶頸查詢。OPTIMIZE TABLE
命令整理表碎片(針對頻繁更新的表,如日志表),提升數據讀取效率;定期備份并清理無用數據(如過期的日志、臨時表)。OPcache
(PHP內置,無需額外安裝)緩存編譯后的PHP腳本(.php文件編譯后的opcode),避免每次請求都重新編譯,顯著提升PHP執行效率。修改/etc/php/<version>/apache2/php.ini
(如/etc/php/8.1/apache2/php.ini
),設置:opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
ob_start('ob_gzhandler')
),減少數據傳輸量。Memcached
或Redis
作為內存緩存系統,緩存數據庫查詢結果(如商品詳情、用戶信息)、會話數據(session.save_handler = memcached
),減少對MySQL的訪問頻率,提升響應速度。例如,使用php-memcached
擴展連接Memcached:sudo apt install php-memcached
,然后在代碼中通過$memcached->get()
/$memcached->set()
操作緩存。mod_expires
模塊設置靜態資源的過期時間(如ExpiresActive On
、ExpiresByType image/jpeg "access plus 1 month"
),讓瀏覽器緩存圖片、CSS、JS等資源,減少重復請求。HAProxy
或LVS
(Linux Virtual Server)實現負載均衡,將請求分發到多臺LAMP服務器,提高服務器集群的吞吐量(如支持10萬+并發請求),避免單點故障。Netplan
(Ubuntu的網絡配置工具)優化網絡參數(如調整MTU為1500、啟用TCP Fast Open),并使用CDN或DNS緩存(如dnsmasq
)減少DNS解析時間(將解析時間從幾百毫秒縮短至幾毫秒)。top
(查看CPU、內存占用)、vmstat
(查看系統整體性能)、iostat
(查看磁盤I/O)、netstat
(查看網絡連接)等命令,或使用Prometheus
+Grafana
搭建可視化監控平臺,實時監控服務器的各項指標(如CPU使用率、內存占用、數據庫查詢時間),及時發現性能瓶頸。access.log
、MySQL的error.log
)、臨時文件(/tmp
目錄),使用du
(查看目錄大?。?、df
(查看磁盤空間)命令檢查磁盤使用情況,避免磁盤空間耗盡導致服務器崩潰。rsync
(增量備份)、Bacula
(企業級備份)等工具,確保數據安全,并定期測試備份的恢復流程(如模擬數據庫崩潰,恢復數據)。