如何在強大的專用伺服器上優化 my.cnf 和 httpd.conf 以提高速度?
我有一台具有 12GB RAM 和雙 Nahalem 四核處理器的專用伺服器。我的網站通常一次只有大約 50-100 名使用者線上(儘管一旦我優化了伺服器,我計劃做廣告並估計這個數字接近 250,這應該仍然很容易由該伺服器處理)。出於某種原因,即使這些數字很低,該站點似乎也經常滯後,幾乎沒有伺服器負載。
我一直在使用 mysqltuner.pl 來嘗試在 my.cnf 中更好地設置一些東西。在這個使用者級別,該站點每秒執行大約 200 個查詢,大約 50/50 讀取/寫入。當涉及 Apache 設置時,我完全不知道要更改什麼。
我主要只是在尋找要更新的東西的一般建議,以更好地優化伺服器的性能,以便頁面真正快速載入。值得注意的是,頁面載入速度相當快,直到幾天前平均線上增加了 3-4 倍(儘管伺服器負載並沒有真正增加)。
如果重要的話,這是一個 CentOS 5.4 伺服器。
好吧,看起來主要問題是 MaxClients 設置得非常低(為 100)。我把它提高到 2000 年,從那時起一切都一帆風順。謝謝pauska指出這一點。
您所說的數字很小,並且正如您所觀察到的那樣,負載在那段時間內沒有變化,所以我不認為這是直接調整 apache 或 mysql 的問題。
根據我追查此類問題的經驗,它幾乎總是與 SQL 有關。我會隔離頁面的哪一部分一直在消耗。在有問題的頁面中插入計時器呼叫並將數據儲存在您可以查看的地方(如果沒有別的,將其吐到 stderr 和 apache 的錯誤日誌中)。在您知道導致速度變慢的程式碼的確切部分之前,您只會猜測。
一些可能性:
- 對已經變得非常大並且現在很慢的表的查詢(缺少索引?需要修剪?)
- 一個從未被修剪過並且變得龐大的會話表
- 非常微妙的損壞(執行並優化所有 mysql 數據庫以修復)
- 一個醜陋的查詢,在每次頁面載入時都會進行大量計算,可以通過將結果保存在記憶體中來優化。
我也會回到基礎,看看你是否找不到“幾天前”發生的變化。頁面被修改了嗎?升級?
要檢查的另一件事是 I/O (iostat),以查看您是否可能受 I/O 限制,儘管通常您會看到負載症狀。