nginx以高效能負載均衡、快取和web伺服器出名,支撐著世界上繁忙**中的40%。大多數使用場景下,nginx和linux系統的預設配置表現較好,但是仍有必要做一些調優以期達到最佳效能。
這篇文章討論當調優系統時需要考慮的一些nginx和linux配置。這些配置有很多,但是在本文裡我們只涉及適合大多數使用者的配置。那些沒有涉及到的配置,只有那些對nginx和linux有深入理解的人,或者nginx專家服務團隊推薦,才會考慮到。
nginx專家服務,已經和世界上一些繁忙**合作來調優nginx以達到最大限度的效能,並且可以對任何需要充分發揮系統能力的客戶提供支援。
這裡假定讀者對nginx架構和配置概念有個基本了解。本文不會重複nginx文件的內容,而是概述各種配置選項並提供相關文件鏈結。
調優時,有一條較好的準則是,一次只改乙個配置項,如果改後沒有效能上的提公升,就退回為原先的值。
我們先討論linux調優,因為有些值會影響在nginx配置中可以用的值。
現代linux核心(2.6+)能夠很好的調節各種配置,有些配置您可能想更改。如果作業系統配置太低,那麼會在核心日誌中看到錯誤資訊,因此需要調節這些配置。linux配置項很多,本文只提及那些在普通工作負載下最可能需要調優的配置項。如果需要這些配置的詳細資訊,請參考linux文件。
backlog佇列
以下設定與連線及其如何排隊直接相關。如果傳入的連線率很高而效能水平參差不齊,比如一些連線似乎被暫停了,那麼更改這些配置可能會有用。
net.core.netdev_max_backlog 該項設定在交由cpu處理之前網絡卡緩衝資料報的速率。對於擁有高頻寬的機器,這個值可能需要增加。檢視網絡卡文件尋求相關建議,或者檢查核心日誌相關錯誤資訊。
檔案描述符
檔案描述符是一種作業系統資源,用來處理諸如連線和開啟檔案的事情。對每乙個連線,nginx可以用上多達兩個檔案描述符。例如,如果nginx用作**,則其中乙個用於客戶端連線,另乙個用於連線到被**的伺服器。如果使用了http keepalive,則連線描述符的使用會少得多。對於有大量連線的系統,如下設定可能需要進行調整:
臨時埠當nginx被當作**使用時,每乙個到upstream伺服器的連線都使用乙個臨時埠。
下面是一些可能影響效能的nginx指令。如前所述,我們僅討論那些推薦大多數使用者調整的指令。這裡未提及到的任何指令,如果沒有nginx團隊的指導,不推薦更改。工作程序
nginx可以執行多個工作程序,每個都能處理大量連線。你可以用如下指令控制工作程序個數以及連線如何被處理:
keepalives持久連線可以減少開啟和關閉連線所需要的cpu和網路開銷,因而對效能有重大影響。nginx終止所有客戶端連線,並具有到upstream伺服器的單獨連線。nginx支援客戶端和upstream伺服器的持久連線。如下指令涉及客戶端持久連線:
如下指令涉及upstream持久連線: 為了啟用到upstream的持久連線,需要增加如下指令: access日誌記錄每個請求需要花費cpu和io週期,減少這種影響的一種方法是啟用access日誌緩衝。這將導致nginx緩衝一系列日誌條目,然後一次性寫入檔案而不是單個單個寫入。
通過指定access_log指令的"buffer=size"選項可以開啟access日誌緩衝,該設定指定要使用的緩衝區的大小。你還可以使用"flush=time"選項告訴nginx多長時間後把緩衝區中的條目寫入檔案。
定義了這兩個選項後,當緩衝區放不下下一條日誌,或者緩衝區中的條目超過了flush引數指定的時間,nginx會將緩衝區中的條目寫入日誌檔案。當工作程序重新開啟日誌檔案或者關閉時,緩衝區中的條目也會被寫入檔案。也可以完全禁用access日誌記錄。
sendfile
sendfile是乙個作業系統特性,可以在nginx上啟用。它通過在核心中從乙個檔案描述符向另乙個檔案描述符複製資料,往往能達到零拷貝,因而可以提供更快的tcp資料傳輸。nginx可以使用該機制將快取或者磁碟上的內容寫到socket,無需從核心空間到使用者空間的上下文切換,因而非常快並且使用較少的cpu開銷。由於資料永遠不會觸及使用者空間,所以不可能把需要訪問資料的過濾器插入到處理鏈中,不能使用任何需要改變內容的nginx過濾器,比如gzip過濾器。nginx預設沒有啟用該機制。 限制
nginx和nginx plus允許設定各種限制,用來控制客戶端資源消耗,以防影響系統效能以及使用者體驗和安全。以下是一些相關指令:
nginx還有一些特性可以用來提高web應用的效能。這些特性不常出現在調優討論中,但是有必要一提,因為它們的影響也可能比較可觀。我們將討論這些特性中的兩個。 快取對於乙個為一組web伺服器或者應用伺服器作負載均衡的nginx例項來說,啟用快取可以顯著地降低響應時間,同時能顯著減輕後端伺服器的負載。快取本身就是乙個主題,這裡不會討論。nginx快取配置的更多資訊請參考:nginx管理指南 - 快取 壓縮
壓縮響應可以大大減小響應的大小,減少頻寬占用。不過,這需要cpu資源來處理壓縮,所以最好在值得減少頻寬占用的情況下使用。需要注意的是,不能對已經壓縮的東西(比如jpeg)再次啟用壓縮。nginx壓縮配置的更多資訊請參考:nginx管理指南 - 壓縮和解壓縮
調優 Nginx效能調優
一.nginx優化配置 1.主配置檔案優化 注 部分配置詳解 worker processes 8 nginx程序數,建議按照cpu數目來指定,一般為它的倍數。worker cpu affinity 00000001 00000010 00000100 00001000 00010000 00100...
Spark效能調優 JVM調優
通過一張圖讓你明白以下四個問題 1.jvm gc機制,堆記憶體的組成 2.spark的調優為什麼會和jvm的調優會有關聯?因為scala也是基於jvm執行的語言 3.spark中oom產生的原因 4.如何在jvm這個層面上來對spark進行調優 補充 spark程式執行時 jvm堆記憶體分配比例 r...
七 Spark效能調優 Shuffle 調優
目錄 一 調節 map 端緩衝區大小 二 調節 reduce 端拉取資料緩衝區大小 三 調節 reduce 端拉取資料重試次數 四 調節 reduce 端拉取資料等待間隔 五 調節 sortshuffle 排序操作閾值 val conf new sparkconf set spark.shuffle...