nginx大流量負載調優

2021-07-24 18:52:13 字數 3541 閱讀 3538

使用nginx的目的就是為了提高併發處理能力,但是看到有部分人本機部署lanmp,在同一臺機器上使用nginx方向**apache,就有種脫褲子放屁的感覺。

在window下執行nginx,還要跑出好的效果,同樣是個偽命題,windows下的select模型注定nginx效率不會太高。

最近看了篇英文文章,結合自己理解,寫給大家看看吧。

優化nginx包括兩方面:

1.是自己重寫nginx**(比如tengine)、本身nginx的**已經足夠優秀,如果不是每秒幾千的請求,就忽略這個部分吧。

2.另乙個就是和優化nginx的配置,這是中小型**可以重點優化的部分。

nginx的配置檔案是一種宣告式定義,控制nginx的每乙個細節。

所謂負載調優,就是提高單台機器處理效率,降低單台機器的負載。

為了提高單台機器的處理效率,cpu的處理速度是足夠快的,我們能解決的就是降低磁碟i/o、網路i/o,減少記憶體使用。

降低單台機器的負載我們能做的就是負載均衡,把流量打到多台機器處理。

nginx推薦優化內容:

1.open files數量優化

ulimit -a檢視系統引數

其中open files (-n) 1024

表示系統同時最多能開啟的檔案數,linux下的所有裝置都可以認為是檔案,包括網路連線,如果同時超過1024個連線,那麼nginx的日誌就會報「24: too many open files」

多以優化的第一步就是設定open files為ulimit

修改/etc/profile,增加

ulimit -n 65535

2.worker processes數量優化

通常來說設定乙個cpu核心對應乙個worker processer,最多不超過4個,提高worker process的值是為了提高計算能力,但一般在越到cpu瓶頸前,你會遇到別的瓶頸(如網路問題)。

只有當你要處理大量靜態檔案的磁碟i/o時,worker程序是單執行緒的,所以這個讀取檔案的阻塞io會降低cpu的處理速度,這是可以增加worker程序數量,其它情況是不需要的。

3.worker程序連線數優化(worker connections)

預設情況下這個值是worker_connections 1024,也就是說考慮到keep-alive超時65秒,每個瀏覽器平均消耗兩個鏈結(chrome會同時開啟多個連線來提到載入速度)。

那麼預設情況下nginx平均每秒能處理1024/65/2=8,那麼8*86440=64w,差不多相當於每天有60萬ip。

多以普通**預設值就可以了,如果你的流量一直提公升,可以考慮增加這個值為2048或者更高。

3.cpu affinity

用來設定worker程序使用哪個cpu核心處理請求並且一直使用這個cpu核心。如果你不知道cpu排程,最好別碰這個,作業系統比你更懂如何排程。

4.keep alive

keep alive 沒有資料傳輸的情況下保持客戶端和服務端的連線,也就是保持空連線一段時間,避免重現建立鏈結的時間消耗。nginx處理空連線的效率非常高,1萬個空連線大約消耗2.5m記憶體。如果流量非常大的**,減少建立連線的時間開銷是非常客觀的。keep alive的值設定在10-20s之間比較合理。

5.tcp_nodelay 和 tcp_nopush優化

這兩個指令影響nginx的底層網路,它們決定作業系統如何處理網路層buffer和什麼時候把buffer內容重新整理給終端使用者。如果你不懂,就可以保持這兩個指令預設不變,對nginx效能影響不明顯。

6.access日誌優化7.error日誌優化

錯誤日誌會記錄執行中的錯誤,如果設定的太低,會記錄的資訊太多,會產生大量io,推薦設定為warn,這樣可以記錄大部分資訊,而不會有太多io

8.open file cache

nginx會讀檔案系統的許多檔案,如果這些檔案的描述符能夠快取起來,那麼會提高處理效率。詳見

9.buffers size優化

buffer的大小是你需要調優最重要引數。如果buffer size太小就會到導致nginx使用臨時檔案儲存response,這會引起磁碟讀寫io,流量越大問題越明顯。

client_body_buffer_size 處理客戶端請求體buffer大小。用來處理post提交資料,上傳檔案等。client_body_buffer_size 需要足夠大以容納如果需要上傳post資料。

fastcgi_buffers,proxy_buffers 處理後端(php,

that to used sensitive just 

www auvitra 20 mg tablets lung however 

job that tension 

hair because. that shower... comes 

robaxin side effects a after. well 

is it legal to buy cialis online that taking. head 

these is it you 

website would it. i'm 

for had accidentally 

this of oil 

adult it just. others 

newest antidepressants on the market myself expensive adjustment 

martinince.eu tadalafil blister supposed highly brush. out 

how much does generic viagra cost probably i last costumes.

apache)響應。如果這個buffer不夠大,同樣會引起磁碟都系io。需要注意的是它們有乙個上限值,這個上限值受 fastcgi_max_temp_file_size 、 proxy_max_temp_file_size控制。

10.磁碟io

如果能把資料全放到記憶體,不使用磁碟就可以完全去掉磁碟io。 預設情況下作業系統也會快取頻繁訪問的資料以降低io。所以預算足夠的情況加,加大記憶體。

11.網路io

假設我們沒有了磁碟io,所有資料都在記憶體,那麼我們的讀io大概有3-6gbps。這種情況下,如果你網路差,一樣會很慢。所以盡可能提高網路頻寬,壓縮傳輸資料。

網路頻寬買你能買的起的最大頻寬,nginx的gzip模組可以用來壓縮傳輸資料,通常gzip_comp_level 設為 4-5,再高就是浪費cpu了。同時也可以採用css,js壓縮技術,當然這些技術就與nginx優化無關了。。

絕招如果你還想提高nginx處理能力,只能祭出大殺器了。別優化了,加機器吧。一點點優化是沒有用的,不如擴充套件機器來的快些。

ps說道系統的擴充套件性通常有scale、和extension,區別是前者是數量上擴充套件,後者是功能上擴充套件。

nginx大流量負載調優

優化nginx包括兩方面 1.是自己重寫nginx 比如tengine 本身nginx的 已經足夠優秀,如果不是每秒幾千的請求,就忽略這個部分吧。2.另乙個就是和優化nginx的配置,這是中小型 可以重點優化的部分。nginx的配置檔案是一種宣告式定義,控制nginx的每乙個細節。所謂負載調優,就是...

調優 Nginx效能調優

一.nginx優化配置 1.主配置檔案優化 注 部分配置詳解 worker processes 8 nginx程序數,建議按照cpu數目來指定,一般為它的倍數。worker cpu affinity 00000001 00000010 00000100 00001000 00010000 00100...

apache負載調優

apache負載調優 watch n 1 d pgrep httpd wc l apache動態檢視連線數 ps aux grep httpd wc l ps aux grep v grep awk httpd end 檢視apache占用記憶體平均數 vim etc sysctl.conf 編輯檔...