中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nginx性能優化的方法

發布時間:2022-02-16 15:57:32 來源:億速云 閱讀:188 作者:iii 欄目:開發技術

這篇文章主要介紹了Nginx性能優化的方法的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Nginx性能優化的方法文章都會有所收獲,下面我們一起來看看吧。

Nginx性能優化的方法

Linux系統參數優化

下文中提到的一些配置,需要較新的Linux(2.6以上)內核才能夠支持,筆者使用的CentOS 7.4,內核版本3.10,如果不滿足需要的話,最好進行相應的升級,畢竟打補丁是件費力不討好的事情。對于系統層面的調優,通常我們修改文件描述符限制、緩沖區隊列長度以及臨時端口數量就可以了。

文件描述符限制

由于每個TCP連接都要占用一個文件描述符,一旦文件描述符耗盡,新的連接到來就會返回“Too many open files”這樣的錯誤,為了提高性能,我們需要對其進行修改:1.系統層級的限制 編輯文件 /etc/sysctl.conf,添加如下內容:

fs.file-max =10000000
fs.nr_open =10000000

用戶層級的限制 編輯文件 /etc/security/limits.conf,添加以下內容:

 *      hard   nofile      1000000
 *      soft   nofile      1000000

這里我們保證用戶層級限制不大于系統層級限制就可以了,否則可能會出現無法通過SSH登錄的問題。修改完畢執行如下命令:

 $ sysctl -p

可以通過執行命令 ulimit -a查看是否修改成功。

TCP連接隊列長度

編輯文件 /etc/sysctl.conf,添加如下內容:

# The length of the syn quenenet.ipv4.tcp_max_syn_backlog =65535# The length of the tcp accept queuenet.core.somaxconn =65535

其中 tcp_max_syn_backlog用于指定半連接SYN隊列長度,當新連接到來時,系統會檢測半連接SYN隊列,如果隊列已滿,則無法處理該SYN請求,并在 /proc/net/netstat中的 ListenOverflows和 ListenDrops中增加統計計數somaxconn用于指定全連接ACCEPT隊列長度,當該隊列滿了以后,客戶端發送的ACK包將無法被正確處理,并返回錯誤”connection reset by peer”Nginx則會記錄一條error日志”no live upstreams while connecting to upstreams”如果出現以上錯誤,我們需要考慮增大這兩項的配置。

臨時端口

由于Nginx用作代理,每個到上游Web服務的TCP連接都要占用一個臨時端口,因此我們需要修改 ip_local_port_range參數 修改 /etc/sysctl.conf文件,添加如下內容:

net.ipv4.ip_local_port_range =102465535
net.ipv4.ip_local_reserved_ports =8080,8081,9000-9010

其中,參數 ip_local_reserved_ports用于指定保留端口,這是為了防止服務端口被占用而無法啟動。

Nginx參數優化

Nginx參數優化主要圍繞 nginx.conf這個配置文件展開,下文不再贅述。

工作進程

Nginx性能強大的一個重要原因在于它采用多進程非阻塞I/O模型,因此我們要妥善利用這一點:

  • worker_processes 默認的Nginx只有一個master進程一個worker進程,我們需要對其進行修改,可以設置為指定的個數,也可以設置為 auto,即系統的CPU核數。更多的worker數量將導致進程間競爭cpu資源,從而帶來不必要的上下文切換。因此這里我們將它設置為cpu的核數即可: worker_processes auto

  • worker_connections 每個worker可以處理的并發連接數,默認值512不是很夠用,我們適當將它增大: worker_connections 4096

  • Nginx支持以下I/O復用方法處理連接:select、 poll、 kqueue、 epoll、 rtsig、 /dev/poll、 eventport。它們分別適用于不同的操作系統,其中 epoll是Linux系統上面效率最高的: use epoll

KeepAlive

為了避免從Nginx到Web服務頻繁的建立、斷開連接,我們可以啟用從HTTP 1.1開始支持的KeepAlive長連接特性,它可以大幅減少CPU和網絡開銷,在我們的實戰中也是對性能提高最大的一環。keepalive必須和 proxy_http_version與 proxy_set_header結合使用, 參考配置如下:

upstream BACKEND {
    keepalive 300;
     server 127.0.0.1:8081;
 }
server {
     listen 8080;
    location /{
        proxy_pass http://BACKEND;
        proxy_http_version 1.1;
        proxy_set_header Connection"";
 }
}

其中 keepalive既非timeout,也不是連接池數量,官方解釋如下:

The connections parameter sets the maximum number of idle keepalive connections to upstream servers that are preserved in the cache of each worker process. When this number is exceeded, the least recently used connections are closed.

可以看出它的意思是“最大空閑長連接數量”,超出這個數量的空閑長連接將被回收,當請求數量穩定而平滑時,空閑長連接數量將會非常小(接近于0),而現實中請求數量是不可能一直平滑而穩定的,當請求數量有波動時,空閑長連接數量也隨之波動:

  1. 當空閑長連接數量大于配置值時,將會導致大于配置值的那部分長連接被回收;
  2. 當長連接不夠用時,將會重新建立新的長連接。

因此,如果這個值過小的話,就會導致連接池頻繁的回收、分配、再回收。為了避免這種情況出現,可以根據實際情況適當調整這個值,在我們實際情況中,目標QPS為6000,Web服務響應時間約為200ms,因此需要約1200個長連接,而 keepalive值取長連接數量的10%~30%就可以了,這里我們取300,如果不想計算,直接設為1000也是可行的。

Access-Log緩存

記錄日志的I/O開銷比較高,好在Nginx支持日志緩存,我們可以利用這個功能,降低寫日志文件的頻率,從而提高性能。可以將 buffer和 flush兩個參數結合使用來控制緩存行為:

  access_log /var/logs/nginx-access.log buffer=64k gzip flush=1m

其中 buffer制定了緩存大小,當緩沖區達到 buffer所指定的大小時,Nginx就會將緩存起來的日志寫到文件中;flush指定了緩存超時時間,當 flush指定的時間到達時,也會觸發緩存日志寫入文件操作。

文件描述符限制

Nginx配置中同樣有相應的配置項:worker_rlimit_nofile, 理論上這個值應該設置為 /etc/security/limits.conf 中的值除以 worker_processes, 但實際中不可能每個進程均勻分配,所以這里只要設置成和 /etc/security/limits.conf 一樣就可以了

 worker_rlimit_nofile 1000000;

關于“Nginx性能優化的方法”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Nginx性能優化的方法”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西安市| 威信县| 金川县| 紫云| 盐池县| 崇州市| 忻城县| 百色市| 潢川县| 长垣县| 湟中县| 枣阳市| 晋州市| 峡江县| 内江市| 沁阳市| 宜州市| 翼城县| 本溪| 密山市| 武鸣县| 肃南| 惠州市| 栾川县| 罗甸县| 鄂尔多斯市| 望都县| 方山县| 沙河市| 孝感市| 陆良县| 永嘉县| 两当县| 比如县| 平邑县| 仪征市| 武威市| 拜泉县| 米林县| 满洲里市| 安福县|