中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

大流量、高負(fù)載場(chǎng)景 Nginx+Linux性能調(diào)優(yōu)

2021-03-10    分類: 網(wǎng)站建設(shè)

Nginx以高性能負(fù)載均衡、緩存和web服務(wù)器出名,支撐著世界上繁忙網(wǎng)站中的40%。大多數(shù)使用場(chǎng)景下,Nginx和Linux系統(tǒng)的默認(rèn)配置表現(xiàn)較好,但是仍有必要做一些調(diào)優(yōu)以期達(dá)到好性能。

這篇文章討論當(dāng)調(diào)優(yōu)系統(tǒng)時(shí)需要考慮的一些Nginx和Linux配置。這些配置有很多,但是在本文里我們只涉及適合大多數(shù)用戶的配置。那些沒有涉及到的配置,只有那些對(duì)Nginx和Linux有深入理解的人,或者Nginx專家服務(wù)團(tuán)隊(duì)推薦,才會(huì)考慮到。

Nginx專家服務(wù),已經(jīng)和世界上一些繁忙網(wǎng)站合作來調(diào)優(yōu)Nginx以達(dá)到大限度的性能,并且可以對(duì)任何需要充分發(fā)揮系統(tǒng)能力的客戶提供支持。

簡(jiǎn)介

這里假定讀者對(duì)Nginx架構(gòu)和配置概念有個(gè)基本了解。本文不會(huì)重復(fù)Nginx文檔的內(nèi)容,而是概述各種配置選項(xiàng)并提供相關(guān)文檔鏈接。

調(diào)優(yōu)時(shí),有一條較好的準(zhǔn)則是,一次只改一個(gè)配置項(xiàng),如果改后沒有性能上的提升,就退回為原先的值。

我們先討論Linux調(diào)優(yōu),因?yàn)橛行┲禃?huì)影響在Nginx配置中可以用的值。

Linux配置

現(xiàn)代Linux內(nèi)核(2.6+)能夠很好的調(diào)節(jié)各種配置,有些配置您可能想更改。如果操作系統(tǒng)配置太低,那么會(huì)在內(nèi)核日志中看到錯(cuò)誤信息,因此需要調(diào)節(jié)這些配置。Linux配置項(xiàng)很多,本文只提及那些在普通工作負(fù)載下最可能需要調(diào)優(yōu)的配置項(xiàng)。如果需要這些配置的詳細(xì)信息,請(qǐng)參考Linux文檔。

Backlog隊(duì)列

以下設(shè)置與連接及其如何排隊(duì)直接相關(guān)。如果傳入的連接率很高而性能水平參差不齊,比如一些連接似乎被暫停了,那么更改這些配置可能會(huì)有用。

  • net.core.somaxconn 該項(xiàng)設(shè)置等待被Nginx接受的連接的排隊(duì)大小。由于Nginx接受連接速度非???,這個(gè)值通常不需要非常大,但是默認(rèn)值是非常低的,所以如果你有一個(gè)高流量網(wǎng)站,增加這個(gè)值是個(gè)好主意。如果設(shè)置過低,那么你能在內(nèi)核日志中看到錯(cuò)誤信息,這時(shí)你應(yīng)該增加這個(gè)值直到?jīng)]有錯(cuò)誤信息。注意:如果你將其設(shè)置為大于512的值,你應(yīng)該同時(shí)用listen指令的backlog參數(shù)匹配這個(gè)值來更改Nginx的配置。
  • net.core.netdev_max_backlog 該項(xiàng)設(shè)置在交由CPU處理之前網(wǎng)卡緩沖數(shù)據(jù)包的速率。對(duì)于擁有高帶寬的機(jī)器,這個(gè)值可能需要增加。查看網(wǎng)卡文檔尋求相關(guān)建議,或者檢查內(nèi)核日志相關(guān)錯(cuò)誤信息。

文件描述符

文件描述符是一種操作系統(tǒng)資源,用來處理諸如連接和打開文件的事情。對(duì)每一個(gè)連接,Nginx可以用上多達(dá)兩個(gè)文件描述符。例如,如果Nginx用作代理,則其中一個(gè)用于客戶端連接,另一個(gè)用于連接到被代理的服務(wù)器。如果使用了HTTP keepalive,則連接描述符的使用會(huì)少得多。對(duì)于有大量連接的系統(tǒng),如下設(shè)置可能需要進(jìn)行調(diào)整:

  • sys.fs.file_max 這是系統(tǒng)范圍內(nèi)的文件描述符限制。
  • nofile 這是用戶級(jí)別的文件描述符限制,在/etc/security/limits.conf文件中配置

臨時(shí)端口

當(dāng)Nginx被當(dāng)作代理使用時(shí),每一個(gè)到upstream服務(wù)器的連接都使用一個(gè)臨時(shí)端口。

  • net.ipv4.ip_local_port_range 這個(gè)用來指定可以使用的起止端口號(hào)。如果你看到端口耗盡,你可以增加這個(gè)范圍。常見的設(shè)置為1024到65000。
  • net.ipv4.tcp_fin_timeout 這個(gè)用于指定一個(gè)不再被使用的端口多久之后可以被另一連接再次使用。通常,這個(gè)值默認(rèn)為60秒,但是可以安全地減少到30甚至15秒。

Nginx配置

下面是一些可能影響性能的Nginx指令。如前所述,我們僅討論那些推薦大多數(shù)用戶調(diào)整的指令。這里未提及到的任何指令,如果沒有Nginx團(tuán)隊(duì)的指導(dǎo),不推薦更改。

工作進(jìn)程

Nginx可以運(yùn)行多個(gè)工作進(jìn)程,每個(gè)都能處理大量連接。你可以用如下指令控制工作進(jìn)程個(gè)數(shù)以及連接如何被處理:

  • worker_processes 這個(gè)控制Nginx運(yùn)行的工作進(jìn)程個(gè)數(shù)。大多數(shù)情況下,一個(gè)CPU核心跑一個(gè)工作進(jìn)程能夠工作得很好。可以將該指令設(shè)為auto來達(dá)到與CPU核心數(shù)匹配的工作進(jìn)程數(shù)。有時(shí)候,可以增加這個(gè)值,比如工作進(jìn)程需要處理大量磁盤IO操作的時(shí)候。這個(gè)值默認(rèn)為1。
  • worker_connections 這個(gè)表示每個(gè)工作進(jìn)程同時(shí)能夠處理的大連接數(shù)。默認(rèn)值是512,但是大多數(shù)系統(tǒng)能處理更大的值。這個(gè)值該設(shè)為多少取決于服務(wù)器硬件配置以及流量的特性,可以通過測(cè)試來發(fā)現(xiàn)。

Keepalives

持久連接可以減少打開和關(guān)閉連接所需要的CPU和網(wǎng)絡(luò)開銷,因而對(duì)性能有重大影響。Nginx終止所有客戶端連接,并具有到upstream服務(wù)器的單獨(dú)連接。Nginx支持客戶端和upstream服務(wù)器的持久連接。如下指令涉及客戶端持久連接:

  • keepalive_requests 這表示客戶端能在單個(gè)持久連接上發(fā)送多少請(qǐng)求。默認(rèn)值是100,可以設(shè)置成更高的值,這在負(fù)載生成器從單個(gè)客戶端發(fā)送大量請(qǐng)求的測(cè)試場(chǎng)景中非常有用。
  • keepalive_timeout 表示一個(gè)空閑持久連接保持打開狀態(tài)多長(zhǎng)時(shí)間。

如下指令涉及upstream持久連接:

  • keepalive 這個(gè)指定每個(gè)工作進(jìn)程連接到upstream服務(wù)器的空閑持久連接數(shù)量。這個(gè)指令沒有默認(rèn)值。

為了啟用到upstream的持久連接,需要增加如下指令:


  1. proxy_http_version 1.1;  
  2. proxy_set_header Connection ""; 

Access日志

記錄每個(gè)請(qǐng)求需要花費(fèi)CPU和IO周期,減少這種影響的一種方法是啟用access日志緩沖。這將導(dǎo)致Nginx緩沖一系列日志條目,然后一次性寫入文件而不是單個(gè)單個(gè)寫入。

通過指定access_log指令的"buffer=size"選項(xiàng)可以打開access日志緩沖,該設(shè)置指定要使用的緩沖區(qū)的大小。你還可以使用"flush=time"選項(xiàng)告訴Nginx多長(zhǎng)時(shí)間后把緩沖區(qū)中的條目寫入文件。

定義了這兩個(gè)選項(xiàng)后,當(dāng)緩沖區(qū)放不下下一條日志,或者緩沖區(qū)中的條目超過了flush參數(shù)指定的時(shí)間,Nginx會(huì)將緩沖區(qū)中的條目寫入日志文件。當(dāng)工作進(jìn)程重新打開日志文件或者關(guān)閉時(shí),緩沖區(qū)中的條目也會(huì)被寫入文件。也可以完全禁用access日志記錄。

Sendfile

Sendfile是一個(gè)操作系統(tǒng)特性,可以在Nginx上啟用。它通過在內(nèi)核中從一個(gè)文件描述符向另一個(gè)文件描述符復(fù)制數(shù)據(jù),往往能達(dá)到零拷貝,因而可以提供更快的TCP數(shù)據(jù)傳輸。Nginx可以使用該機(jī)制將緩存或者磁盤上的內(nèi)容寫到socket,無需從內(nèi)核空間到用戶空間的上下文切換,因而非??觳⑶沂褂幂^少的CPU開銷。由于數(shù)據(jù)永遠(yuǎn)不會(huì)觸及用戶空間,所以不可能把需要訪問數(shù)據(jù)的過濾器插入到處理鏈中,不能使用任何需要改變內(nèi)容的Nginx過濾器,比如gzip過濾器。Nginx默認(rèn)沒有啟用該機(jī)制。

限制

Nginx和Nginx Plus允許設(shè)置各種限制,用來控制客戶端資源消耗,以防影響系統(tǒng)性能以及用戶體驗(yàn)和安全。以下是一些相關(guān)指令:

  • limit_conn / limit_conn_zone 這些指令可以用來限制Nginx允許的連接數(shù),比如來自單個(gè)客戶端IP地址的連接數(shù)。這可以防止單個(gè)客戶端打開太多連接而消耗太多資源。
  • limit_rate 這個(gè)用來限制客戶端在單個(gè)連接上允許使用的帶寬。這可以防止某些客戶端導(dǎo)致系統(tǒng)超載,因而有利于為所有客戶端提供QoS保證。
  • limit_req / limit_req_zone 這些指令可以用來限制Nginx的請(qǐng)求處理速率。與limit_rate一起,可以防止某些客戶端導(dǎo)致系統(tǒng)超載,因而有利于為所有客戶端提供QoS保證。這些指令也可以用來增強(qiáng)安全性,尤其是對(duì)登錄頁(yè)面,通過限制請(qǐng)求速率,使得其對(duì)人類用戶是合適的,而會(huì)減慢試圖訪問你的應(yīng)用的程序。
  • max_conns 這個(gè)用來限制同時(shí)連接到upstream組中單個(gè)服務(wù)器的大連接數(shù)。這可以防止upstream服務(wù)器超載。默認(rèn)值是0,表示沒有限制。
  • queue 如果設(shè)置了max_conns,那么queue指令用來決定當(dāng)一個(gè)請(qǐng)求由于upstream組中沒有可用服務(wù)器或者這些服務(wù)器達(dá)到max_conns限制而不能得到處理時(shí)會(huì)發(fā)生什么。這個(gè)指令用來設(shè)定有多少請(qǐng)求將會(huì)排隊(duì)以及排多久。如果沒有設(shè)置這個(gè)指令,就不會(huì)有排隊(duì)行為。

其它考慮

Nginx還有一些特性可以用來提高web應(yīng)用的性能。這些特性不常出現(xiàn)在調(diào)優(yōu)討論中,但是有必要一提,因?yàn)樗鼈兊挠绊懸部赡鼙容^可觀。我們將討論這些特性中的兩個(gè)。

緩存

對(duì)于一個(gè)為一組web服務(wù)器或者應(yīng)用服務(wù)器作負(fù)載均衡的Nginx實(shí)例來說,啟用緩存可以顯著地降低響應(yīng)時(shí)間,同時(shí)能顯著減輕后端服務(wù)器的負(fù)載。緩存本身就是一個(gè)主題,這里不會(huì)討論。

壓縮

壓縮響應(yīng)可以大大減小響應(yīng)的大小,減少帶寬占用。不過,這需要CPU資源來處理壓縮,所以最好在值得減少帶寬占用的情況下使用。需要注意的是,不能對(duì)已經(jīng)壓縮的東西(比如jpeg圖片)再次啟用壓縮。

當(dāng)前標(biāo)題:大流量、高負(fù)載場(chǎng)景 Nginx+Linux性能調(diào)優(yōu)
URL網(wǎng)址:http://www.rwnh.cn/news/104938.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)品牌網(wǎng)站制作、響應(yīng)式網(wǎng)站服務(wù)器托管、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
常州市| 合阳县| 同江市| 固始县| 盐源县| 武城县| 水城县| 双峰县| 从江县| 嘉荫县| 繁昌县| 满洲里市| 乌海市| 上林县| 上饶县| 贵德县| 平乡县| 上饶县| 红原县| 遂平县| 武山县| 十堰市| 云安县| 廊坊市| 台州市| 尤溪县| 天长市| 淮安市| 丰县| 积石山| 墨竹工卡县| 方城县| 乌苏市| 科技| 城固县| 大兴区| 浠水县| 南汇区| 吴堡县| 丰台区| 那坡县|