国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

為高負載網絡優化Nginx和Node.js

開發 開發工具 前端
如果不先對Nginx和Node.js的底層傳輸機制有所了解,并進行針對性優化,可能對兩者再細致的調優也會徒勞無功。一般情況下,Nginx通過TCP socket來連接客戶端與上游應用。

在搭建高吞吐量web應用這個議題上,NginX和Node.js可謂是天生一對。他們都是基于事件驅動模型而設計,可以輕易突破Apache等傳統web服務器的C10K瓶頸。預設的配置已經可以獲得很高的并發,不過,要是大家想在廉價硬件上做到每秒數千以上的請求,還是有一些工作要做的。

這篇文章假定讀者們使用NginX的HttpProxyModule來為上游的node.js服務器充當反向代理。我們將介紹Ubuntu 10.04以上系統sysctl的調優,以及node.js應用與NginX的調優。當然,如果大家用的是Debian系統,也能達到同樣的目標,只不過調優的方法有所不同而已。

網絡調優

如果不先對Nginx和Node.js的底層傳輸機制有所了解,并進行針對性優化,可能對兩者再細致的調優也會徒勞無功。一般情況下,Nginx通過TCP socket來連接客戶端與上游應用。

我們的系統對TCP有許多門限值與限制,通過內核參數來設定。這些參數的默認值往往是為一般的用途而定的,并不能滿足web服務器所需的高流量、短生命的要求。

這里列出了調優TCP可供候選的一些參數。為使它們生效,可以將它們放在/etc/sysctl.conf文件里,或者放入一個新配置文件,比如/etc/sysctl.d/99-tuning.conf,然后運行sysctl -p,讓內核裝載它們。我們是用sysctl-cookbook來干這個體力活。

需要注意的是,這里列出來的值是可以安全使用的,但還是建議大家研究一下每個參數的含義,以便根據自己的負荷、硬件和使用情況選擇一個更加合適的值。

  1. net.ipv4.ip_local_port_range='1024 65000' 
  2. net.ipv4.tcp_tw_reuse='1' 
  3. net.ipv4.tcp_fin_timeout='15' 
  4. net.core.netdev_max_backlog='4096' 
  5. net.core.rmem_max='16777216' 
  6. net.core.somaxconn='4096' 
  7. net.core.wmem_max='16777216' 
  8. net.ipv4.tcp_max_syn_backlog='20480' 
  9. net.ipv4.tcp_max_tw_buckets='400000' 
  10. net.ipv4.tcp_no_metrics_save='1' 
  11. net.ipv4.tcp_rmem='4096 87380 16777216' 
  12. net.ipv4.tcp_syn_retries='2' 
  13. net.ipv4.tcp_synack_retries='2' 
  14. net.ipv4.tcp_wmem='4096 65536 16777216' 
  15. vm.min_free_kbytes='65536' 

重點說明其中幾個重要的。

net.ipv4.ip_local_port_range

為了替上游的應用服務下游的客戶端,NginX必須打開兩條TCP連接,一條連接客戶端,一條連接應用。在服務器收到很多連接時,系統的可用端口將很快被耗盡。通過修改net.ipv4.ip_local_port_range參數,可以將可用端口的范圍改大。如果在/var/log/syslog中發現有這樣的錯誤: “possible SYN flooding on port 80. Sending cookies”,即表明系統找不到可用端口。增大net.ipv4.ip_local_port_range參數可以減少這個錯誤。

net.ipv4.tcp_tw_reuse

當服務器需要在大量TCP連接之間切換時,會產生大量處于TIME_WAIT狀態的連接。TIME_WAIT意味著連接本身是關閉的,但資源還沒有釋放。將net_ipv4_tcp_tw_reuse設置為1是讓內核在安全時盡量回收連接,這比重新建立新連接要便宜得多。

net.ipv4.tcp_fin_timeout

這是處于TIME_WAIT狀態的連接在回收前必須等待的最小時間。改小它可以加快回收。

如何檢查連接狀態

使用netstat:

netstat -tan | awk '{print $6}' | sort | uniq -c

或使用ss:

ss -s

NginX

  1. ss -s  
  2. Total: 388 (kernel 541)  
  3. TCP:   47461 (estab 311, closed 47135, orphaned 4, synrecv 0, timewait 47135/0), ports 33938 
  4.  
  5. Transport Total     IP        IPv6  
  6. *          541       -         -          
  7. RAW        0         0         0          
  8. UDP        13        10        3          
  9. TCP        326       325       1          
  10. INET       339       335       4          
  11. FRAG       0         0         0 

隨著web服務器的負載逐漸升高,我們就會開始遭遇NginX的某些奇怪限制。連接被丟棄,內核不停報SYN flood。而這時,平均負荷和CPU使用率都很小,服務器明明是可以處理更多連接的狀態,真令人沮喪。

經過調查,發現有非常多處于TIME_WAIT狀態的連接。這是其中一個服務器的輸出:

有47135個TIME_WAIT連接!而且,從ss可以看出,它們都是已經關閉的連接。這說明,服務器已經消耗了絕大部分可用端口,同時也暗示我們,服務器是為每個連接都分配了新端口。調優網絡對這個問題有一點幫助,但是端口仍然不夠用。

經過繼續研究,我找到了一個關于上行連接keepalive指令的文檔,它寫道:

 設置通往上游服務器的最大空閑保活連接數,這些連接會被保留在工作進程的緩存中。
 

有趣。理論上,這個設置是通過在緩存的連接上傳遞請求來盡可能減少連接的浪費。文檔中還提到,我們應該把proxy_http_version設為"1.1",并清除"Connection"頭部。經過進一步的研究,我發現這是一種很好的想法,因為HTTP/1.1相比HTTP1.0,大大優化了TCP連接的使用率,而Nginx默認用的是HTTP/1.0。

按文檔的建議修改后,我們的上行配置文件變成這樣:

  1. upstream backend_nodejs {  
  2.   server nodejs-3:5016 max_fails=0 fail_timeout=10s;  
  3.   server nodejs-4:5016 max_fails=0 fail_timeout=10s;  
  4.   server nodejs-5:5016 max_fails=0 fail_timeout=10s;  
  5.   server nodejs-6:5016 max_fails=0 fail_timeout=10s;  
  6.   keepalive 512;  

我還按它的建議修改了server一節的proxy設置。同時,加了一個 p roxy_next_upstream來跳過故障的服務器,調整了客戶端的 keepalive_timeout,并關閉訪問日志。配置變成這樣:

  1. server {  
  2.   listen 80;  
  3.   server_name fast.gosquared.com;  
  4.  
  5.   client_max_body_size 16M;  
  6.   keepalive_timeout 10;  
  7.  
  8.   location / {  
  9.     proxy_next_upstream error timeout http_500 http_502 http_503 http_504;  
  10.     proxy_set_header   Connection "";  
  11.     proxy_http_version 1.1;  
  12.     proxy_pass http://backend_nodejs;  
  13.   }  
  14.  
  15.   access_log off;  
  16.   error_log /dev/null crit;  

采用新的配置后,我發現服務器們占用的socket 降低了90%。現在可以用少得多的連接來傳輸請求了。新的輸出如下:

  1. ss -s  
  2.  
  3. Total: 558 (kernel 604)  
  4. TCP:   4675 (estab 485, closed 4183, orphaned 0, synrecv 0, timewait 4183/0), ports 2768 
  5.  
  6. Transport Total     IP        IPv6  
  7. *          604       -         -          
  8. RAW        0         0         0          
  9. UDP        13        10        3          
  10. TCP        492       491       1          
  11. INET       505       501       4 

Node.js

得益于事件驅動式設計可以異步處理I/O,Node.js開箱即可處理大量的連接和請求。雖然有其它一些調優手段,但這篇文章將主要關注node.js的進程方面。

Node是單線程的,不會自動使用多核。也就是說,應用不能自動獲得服務器的全部能力。

實現Node進程的集群化

我們可以修改應用,讓它fork多個線程,在同一個端口上接收數據,從而實現負載的跨越多核。Node有一個cluster模塊,提供了實現這個目標所必需的所有工具,但要將它們加入應用中還需要很多體力活。如果你用的是express,eBay有一個叫cluster2的模塊可以用。

防止上下文切換

當運行多個進程時,應該確保每個CPU核同一時間只忙于一個進程。一般來說,如果CPU有N個核,我們應該生成N-1個應用進程。這樣可以確保每個進程都能得到合理的時間片,而剩下的一個核留給內核調度程序運行其它任務。我們還要確保服務器上基本不執行除Node.js外的其它任務,防止出現CPU的爭用。

我們曾經犯過一個錯誤,在服務器上部署了兩個node.js應用,然后每個應用都開了N-1個進程。結果,它們互相之間搶奪CPU,導致系統的負荷急升。雖然我們的服務器都是8核的機器,但仍然可以明顯地感覺到由上下文切換引起的性能開銷。上下文切換是指CPU為了執行其它任務而掛起當前任務的現象。在切換時,內核必須掛起當前進程的所有狀態,然后裝載和執行另一個進程。為了解決這個問題,我們減少了每個應用開啟的進程數,讓它們公平地分享CPU,結果系統負荷就降了下來:

 

 

請注意上圖,看系統負荷(藍線)是如何降到CPU核數(紅線)以下的。在其它服務器上,我們也看到了同樣的情況。既然總的工作量保持不變,那么上圖中的性能改善只能歸功于上下文切換的減少。

原文鏈接:http://www.oschina.net/translate/optimising-nginx-node-js-and-networking-for-heavy-workloads

責任編輯:林師授 來源: OSChina
相關推薦

2013-03-06 17:51:59

高負載網絡優化NginxNode.js

2025-07-24 06:54:11

Node.jsCPU負載

2022-09-04 15:54:10

Node.jsAPI技巧

2025-05-26 00:31:31

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2013-11-01 09:34:56

Node.js技術

2011-09-08 13:46:14

node.js

2011-09-09 14:23:13

Node.js

2011-09-02 14:47:48

Node

2011-11-01 10:30:36

Node.js

2012-10-24 14:56:30

IBMdw

2011-11-10 08:55:00

Node.js

2019-07-09 14:50:15

Node.js前端工具

2021-12-25 22:29:57

Node.js 微任務處理事件循環

2014-02-19 16:28:53

Node.jsWeb工具

2024-09-25 08:04:58

2013-03-28 14:54:36

2014-07-11 14:16:15

AbsurdJSExpress

2021-06-15 15:03:21

MongoDBNode.jsCRUD

2022-07-14 08:16:24

Node.js后端自動化測試
點贊
收藏

51CTO技術棧公眾號

国产成人自拍网| 亚洲资源在线| 欧美中文字幕| 性亚洲最疯狂xxxx高清| 美丽的姑娘在线观看免费动漫| 国产成人啪免费观看软件| 97免费在线视频| 国模私拍视频在线播放| 亚洲综合久久久| 黄色特一级视频| 亚洲精品美女| 日本精品视频在线播放| 自拍网站在线观看| 91精品国产一区二区三区香蕉| 丁香六月婷婷| www.亚洲免费av| 日韩亚洲视频| 国产综合欧美| 国产一区二区丝袜高跟鞋图片| 精品麻豆剧传媒av国产九九九| 亚洲成人av中文字幕| 免费在线观看污视频| 亚洲猫色日本管| 天天操天天爽天天射| 丁香六月久久综合狠狠色| 欧美午夜免费| 亚洲狼人精品一区二区三区| 成人动漫网站在线观看| 亚洲盗摄视频| 久久久久亚洲精品| 看片一区二区| 亚洲欧美在线看| 不卡福利视频| 亚洲精选中文字幕| 超碰在线cao| 精品国精品自拍自在线| 超碰免费公开在线| 欧美一区二区成人| 黄色在线观看网站| 欧美一区二区三区日韩| 国产精品一卡二卡三卡| 91麻豆精品国产91久久久使用方法| 久草在线网址| 欧美性色综合网| 你懂的在线观看视频网站| 福利视频第一区| 天堂av网在线| 色噜噜狠狠成人中文综合| 天堂视频中文在线| 欧美三区在线观看| 麻豆视频在线观看免费| 欧美丰满美乳xxx高潮www| 日本视频在线免费观看| 日韩欧美一二区| 3344国产永久在线观看视频| 亚洲激情视频网| 美女搞黄视频在线观看| 亚洲欧美在线一区二区| 日本肉肉一区| 欧美日韩爱爱视频| 九九免费精品视频在线观看| 国产精品情侣自拍| 午夜精品亚洲| 欧洲久久久久久| 国产精品一区在线观看乱码| 国产女大学生av| 亚洲欧美视频一区| 蜜桃免费在线| 精品日韩99亚洲| 日日狠狠久久| 国产精品爱啪在线线免费观看| 91精品国产视频| 亚洲精品国产精品久久| 99精品桃花视频在线观看| 91久久精品国产性色| 在线亚洲免费视频| 在线观看爽视频| 欧美激情亚洲综合一区| 图片区亚洲欧美小说区| 视频在线99| 久久久久久99久久久精品网站| 黄网站色大毛片| 在线成人午夜影院| 国产一区精品福利| 国产激情久久久| 老鸭窝亚洲一区二区三区| www.日本在线播放| 亚洲国产精品久久不卡毛片| 色呦呦在线观看视频| 久久99热这里只有精品国产 | 国产国产人免费人成免费视频| 天天综合日日夜夜精品| 黑人另类精品××××性爽| 欧美日本高清一区| 影音先锋成人在线电影| 第九区2中文字幕| 亚洲午夜成aⅴ人片| 欧美xxxbbb| 国产91成人video| 新67194成人永久网站| 国产精品亚洲a| 欧美午夜在线一二页| 国产精品高清乱码在线观看| 国产精品中文字幕久久久| 韩国一区二区视频| 中文字幕不卡| 日韩在线欧美在线| 午夜亚洲福利| 四季av一区二区| 精品国产电影一区二区| av中文字幕一区二区| 亚洲天堂第一区| 色老综合老女人久久久| 日本精品在线播放 | 欧美激情一区二区三区不卡| 粉嫩一区二区三区国产精品| 久久精品美女视频网站| 中文亚洲免费| 69av二区| 中文字幕亚洲第一| 一本色道久久综合| 午夜国产视频| 两个人的视频www国产精品| 宅男噜噜噜66一区二区| 国产一级激情| 久久精品国产亚洲精品2020| 欧美亚洲三区| 亚洲尤物在线视频| 久久久久久久久久久免费| 日韩福利电影在线| 日本在线视频1区| 91精品国产高清久久久久久| 国产一区二区福利视频| www.视频在线.com| 国产日本欧美一区二区三区在线| 久久亚洲综合色| 久久91导航| 视频在线精品一区| 欧美系列在线观看| 日韩在线视频精品| 97在线资源在| 麻豆国产精品va在线观看不卡| 久久精品国内一区二区三区| 3p视频在线观看| 成人免费自拍视频| 亚洲激情自拍视频| 国产伦精品一区二区三区免费优势 | 天天草夜夜草| 欧美xxxx18国产| 国产乱码精品一区二区三区av| 国产在线更新| 国产厕所精品在线观看| 欧美性xxxxhd| 亚洲国产精品日韩专区av有中文| 男人插女人欧美| 国内精品模特av私拍在线观看| 91蝌蚪国产九色| 蜜桃在线一区| 四季av一区二区| 九九热这里只有精品免费看| 国产精品一色哟哟哟| 久久人体大尺度| 男人天堂手机在线视频| 在线日韩精品视频| 99综合电影在线视频| 91精品国产一区二区在线观看| 国产极品尤物在线| 欧美成人全部免费| 中文字幕色av一区二区三区| 国产精品777777在线播放| 成人午夜激情av| 国产成人精品在线观看| 亚洲午夜久久久久久久久电影网| 成人影视亚洲图片在线| 三级网站在线| 国产区一区二区三区| 日韩小视频在线观看专区| 免费高清不卡av| 国产麻豆久久| www.99在线| 国产精品久久久久久久久久ktv| 亚洲一区在线观看视频| 亚洲欧美网站在线观看| 黄色免费在线看| 欧美一区二区三区综合| 日韩中文字幕视频| 亚洲视频一二区| 国产精品激情| 中文一区一区三区高中清不卡免费| 国产av熟女一区二区三区| 欧美黑人xxx| 日韩欧美亚洲综合| 日本aⅴ亚洲精品中文乱码| 韩日精品一区| 全部孕妇毛片丰满孕妇孕| 国产亚洲欧美一区二区三区| 国产亚洲精品高潮| 一区二区三区欧美视频| 久久久水蜜桃av免费网站| 精品久久久久久久久久岛国gif|