Mysql
優化在 VPS 上執行的 apache/php/mysql 以應對重負載
關於在具有 512m RAM 的 VPS 上優化 apache/mysql 伺服器的問題。在正常負載下,一切都執行得很快,沒有連接延遲。但是,當我們遇到流量大的日子(50k+ 訪問)時,網站會爬網,從 apache 取回內容需要 30 秒以上。
該站點在 Expression Engine (CMS)(在 PHP 中)上執行,我遵循了他們的重載優化指南。我已經用Google搜尋並跟踪了很多關於 apache 的運氣,將它帶到了現在的位置,但我需要獲得恆定的響應時間。
我認為這與此處的“優化低記憶體”問題不同,因為我有足夠的 RAM(對於我正在嘗試做的事情),我只需要讓伺服器在重負載下不會阻塞。
有什麼建議嗎?
對於 PHP,有 2 件重要的事情會增加容量:
- 如前所述,高級 PHP 記憶體(APC)。這就是我們在 Yahoo! 使用的。還有其他類似的項目,但這個是拉斯穆斯的寶貝。
- FastCGI代替 mod_php。關於這個問題存在爭議,因為 mod_php 通常是最快的。但是,我假設您有一個 Apache 伺服器,它同時提供動態 PHP 內容和靜態資產(JS、CSS、flash、圖像、PDF 等)。對這些靜態資產的請求不需要消耗太多記憶體,但是因為 PHP 是一個模組,所以它存在於每個 Apache 執行緒中。
對於阿帕奇:
您甚至可以考慮從 Apache 切換到Lighttpd或Nginx。我愛阿帕奇。我使用它的許多高級功能中的傻瓜。我接受它的成本,因為我需要它提供的東西。對於普通的 LAMP 堆棧,它是多餘的,而且浪費資源。
對於 MySQL:
- 當您花在分析和糾正查詢上,而不是調整您的 my.cnf 值時,您的優化工作將獲得 10 倍的回報。我並不是說讓你的記憶體、連接等正確並不重要……但對大多數人來說,這只是問題的 9%。
- 在 QA 期間,打開 staging/dev mysqld 上的一般查詢日誌以擷取所有發送的查詢。(不要在你的生產 mysql 伺服器上這樣做!)
- 使用EXPLAIN分析查詢。特別是如果您使用帶有 ORM 的框架(抽像出數據庫並阻止您編寫自己的 SQL),您將需要清除無關的 JOIN、沒有 WHERE 子句的 SELECT、導致“使用文件排序”的 ORDER BY 和查詢不使用索引。
- 如果您使用的是 MySQL 5.1 ,請利用查詢分析器。
其他值得考慮的工具是mk-visual-explain
我引用了 10 個很好的參考文獻。這些東西應該讓你哼哼。請讓我們知道結果如何。