国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

分析影響http性能的常見因素

來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 15:21:59
文檔

分析影響http性能的常見因素

分析影響http性能的常見因素:本篇文章的主要內(nèi)容是關(guān)于介紹影響HTTP性能的常見因素,具有一定的參考價值,感興趣的朋友可以了解一下。我們這里討論HTTP性能是建立在一個最簡單模型之上就是單臺服務(wù)器的HTTP性能,當然對于大規(guī)模負載均衡集群也適用畢竟這種集群也是由多個HTTTP服務(wù)器的
推薦度:
導(dǎo)讀分析影響http性能的常見因素:本篇文章的主要內(nèi)容是關(guān)于介紹影響HTTP性能的常見因素,具有一定的參考價值,感興趣的朋友可以了解一下。我們這里討論HTTP性能是建立在一個最簡單模型之上就是單臺服務(wù)器的HTTP性能,當然對于大規(guī)模負載均衡集群也適用畢竟這種集群也是由多個HTTTP服務(wù)器的

不過如果web服務(wù)器并且開啟了keep-alive的話,當達到超時時長服務(wù)器也會主動關(guān)閉。(我這里并不是說TCP/IP詳解錯了,而是它在那一節(jié)主要是針對TCP來說,并沒有引入HTTP,而且它說的是通常而不是一定)

我使用Nginx做測試,并且在配置文件中設(shè)置了keepalive_timeout 65s;,Nginx的默認設(shè)置是75s,設(shè)置為0表示禁用keepalive,如下圖:

下面我使用Chrom瀏覽器訪問這個Nginx默認提供的主頁,并通過抓包程序來監(jiān)控整個通信過程,如下圖:

從上圖可以看出來在有效數(shù)據(jù)傳送完畢后,中間出現(xiàn)了Keep-Alive標記的通信,并且在65秒內(nèi)沒有請求后服務(wù)器主動斷開連接,這種情況你在Nginx的服務(wù)器上就會看到TIME_WAIT的狀態(tài)。

服務(wù)端端口耗盡

有人說Nginx監(jiān)聽80或者443,客戶端都是連接這個端口,服務(wù)端怎么會端口耗盡呢?就像下圖一樣(忽略圖中的TIME_WAIT,產(chǎn)生這個的原因上面已經(jīng)說過了是因為Nginx的keepalive_timeout設(shè)置導(dǎo)致的)

其實,這取決于Nginx工作模式,我們使用Nginx通常都是讓其工作在代理模式,這就意味著真正的資源或者數(shù)據(jù)在后端Web應(yīng)用程序上,比如Tomcat。代理模式的特點是代理服務(wù)器代替用戶去后端獲取數(shù)據(jù),那么此時相對于后端服務(wù)器來說,Nginx就是一個客戶端,這時候Nginx就會使用隨機端口來向后端發(fā)起請求,而系統(tǒng)可用隨機端口范圍是一定的,可以使用sysctl net.ipv4.ip_local_port_range命令來查看服務(wù)器上的隨機端口范圍。

通過我們之前介紹的延遲確認、Nagle算法以及代理模式下Nginx充當后端的客戶端角色并使用隨機端口連接后端,這就意味著服務(wù)端的端口耗盡風險是存在的。隨機端口釋放速度如果比與后端建立連接的速度慢就有可能出現(xiàn)。不過一般不會出現(xiàn)這個情況,至少我們公司的Nginx我沒有發(fā)現(xiàn)有這種現(xiàn)象產(chǎn)生。因為首先是靜態(tài)資源都在CDN上;其次后端大部分都是REST接口提供用戶認證或者數(shù)據(jù)庫操作,這些操作其實后端如果沒有瓶頸的話基本都很快。不過話說回來如果后端真的有瓶頸且擴容或者改架構(gòu)成本比較高的話,那么當面對大量并發(fā)的時候你應(yīng)該做的是限流防止后端被打死。

服務(wù)端HTTP進程打開文件數(shù)量達到最大

我們說過HTTP通信依賴TCP連接,一個TCP連接就是一個套接字,對于類Unix系統(tǒng)來說,打開一個套接字就是打開一個文件,如果有100個請求連接服務(wù)端,那么一旦連接建立成功服務(wù)端就會打開100個文件,而Linux系統(tǒng)中一個進程可以打開的文件數(shù)量是有限的ulimit -f,所以如果這個數(shù)值設(shè)置的太小那么也會影響HTTP連接。而對以代理模式運行的Nginx或者其他HTTP程序來說,通常一個連接它就要打開2個套接字也就會占用2個文件(命中Nginx本地緩存或者Nginx直接返回數(shù)據(jù)的除外)。所以對于代理服務(wù)器這個進程可打開的文件數(shù)量也要設(shè)置的大一點。

持久連接Keepalive

首先我們要知道keepalive可以設(shè)置在2個層面上,且2個層面意義不同。TCP的keepalive是一種探活機制,比如我們常說的心跳信息,表示對方還在線,而這種心跳信息的發(fā)送由有時間間隔的,這就意味著彼此的TCP連接要始終保持打開狀態(tài);而HTTP中的keep-alive是一種復(fù)用TCP連接的機制,避免頻繁建立TCP連接。所以一定明白TCP的Keepalive和HTTP的Keep-alive不是一回事。

HTTP的keep-alive機制

非持久連接會在每個HTTP事務(wù)完成后斷開TCP連接,下一個HTTP事務(wù)則會再重新建立TCP連接,這顯然不是一種高效機制,所以在HTTP/1.1以及HTTP/1.0的增強版本中允許HTTP在事務(wù)結(jié)束后將TCP連接保持打開狀態(tài),以便后續(xù)的HTTP事務(wù)可以復(fù)用這個連接,直到客戶端或者服務(wù)器主動關(guān)閉該連接。持久連接減少了TCP連接建立的次數(shù)同時也最大化的規(guī)避了TCP慢啟動帶來的流量限制。

相關(guān)教程:HTTP視頻教程

再來看一下這張圖,圖中的keepalive_timeout 65s設(shè)置了開啟http的keep-alive特性并且設(shè)置了超時時長為65秒,其實還有比較重要的選項是keepalive_requests 100;它表示同一個TCP連接最多可以發(fā)起多少個HTTP請求,默認是100個。

在HTTP/1.0中keep-alive并不是默認使用的,客戶端發(fā)送HTTP請求時必須帶有Connection: Keep-alive的首部來試圖激活keep-alive,如果服務(wù)器不支持那么將無法使用,所有請求將以常規(guī)形式進行,如果服務(wù)器支持那么在響應(yīng)頭中也會包括Connection: Keep-alive的信息。

在HTTP/1.1中默認就使用Keep-alive,除非特別說明,否則所有連接都是持久的。如果要在一個事務(wù)結(jié)束后關(guān)閉連接,那么HTTP的響應(yīng)頭中必須包含Connection: CLose首部,否則該連接會始終保持打開狀態(tài),當然也不能總是打開,也必須關(guān)閉空閑連接,就像上面Nginx的設(shè)置一樣最多保持65秒的空閑連接,超過后服務(wù)端將會主動斷開該連接。

TCP的keepalive

在Linux上沒有一個統(tǒng)一的開關(guān)去開啟或者關(guān)閉TCP的Keepalive功能,查看系統(tǒng)keepalive的設(shè)置sysctl -a | grep tcp_keepalive,如果你沒有修改過,那么在Centos系統(tǒng)上它會顯示:

net.ipv4.tcp_keepalive_intvl = 75 # 兩次探測直接間隔多少秒
net.ipv4.tcp_keepalive_probes = 9 # 探測頻率
net.ipv4.tcp_keepalive_time = 7200 # 表示多長時間進行一次探測,單位秒,這里也就是2小時

按照默認設(shè)置,那么上面的整體含義就是2小時探測一次,如果第一次探測失敗,那么過75秒再探測一次,如果9次都失敗就主動斷開連接。

如何開啟Nginx上的TCP層面的Keepalive,在Nginx中有一個語句叫做listen它是server段里面用于設(shè)置Nginx監(jiān)聽在哪個端口的語句,其實它后面還有其他參數(shù)就是用來設(shè)置套接字屬性的,看下面幾種設(shè)置:

# 表示開啟,TCP的keepalive參數(shù)使用系統(tǒng)默認的
listen 80 default_server so_keepalive=on;
# 表示顯式關(guān)閉TCP的keepalive
listen 80 default_server so_keepalive=off;
# 表示開啟,設(shè)置30分鐘探測一次,探測間隔使用系統(tǒng)默認設(shè)置,總共探測10次,這里的設(shè)
# 置將會覆蓋上面系統(tǒng)默認設(shè)置
listen 80 default_server so_keepalive=30m::10;

所以是否要在Nginx上設(shè)置這個so_keepalive,取決于特定場景,千萬不要把TCP的keepalive和HTTP的keepalive搞混淆,因為Nginx不開啟so_keepalive也不影響你的HTTP請求使用keep-alive特性。如果客戶端和Nginx直接或者Nginx和后端服務(wù)器之間有負載均衡設(shè)備的話而且是響應(yīng)和請求都會經(jīng)過這個負載均衡設(shè)備,那么你就要注意這個so_keepalive了。比如在LVS的直接路由模式下就不受影響,因為響應(yīng)不經(jīng)過
LVS,不過要是NAT模式就需要留意,因為LVS保持TCP會話也有一個時長,如果該時長小于后端返回數(shù)據(jù)的時長那么LVS就會在客戶端還沒有收到數(shù)據(jù)的情況下斷開這條TCP連接。


  1. TCP擁塞控制有一些算法,其中就包括TCP慢啟動、擁塞避免等算法?

  2. 有些地方也叫做IP分片但都是一個意思,至于為什么分片簡單來說就是受限于數(shù)據(jù)鏈路層,不同的數(shù)據(jù)鏈路其MTU不同,以太網(wǎng)的是1500字節(jié),在某些場景會是1492字節(jié);FDDI的MTU又是另外一種大小,單純考慮IP層那么IP數(shù)據(jù)包最大是65535字節(jié)?

  3. 在《HTTP權(quán)威指南》P90頁中并沒有說的特別清楚,這種情況是相對于客戶端來說還是服務(wù)端,因為很有可能讓人誤解,當然并不是說服務(wù)端不會出現(xiàn)端口耗盡的情況,所以我這里才增加了2項內(nèi)容?

  4. 最長不會超過2分鐘?

相關(guān)教程:HTTP視頻教程

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

分析影響http性能的常見因素

分析影響http性能的常見因素:本篇文章的主要內(nèi)容是關(guān)于介紹影響HTTP性能的常見因素,具有一定的參考價值,感興趣的朋友可以了解一下。我們這里討論HTTP性能是建立在一個最簡單模型之上就是單臺服務(wù)器的HTTP性能,當然對于大規(guī)模負載均衡集群也適用畢竟這種集群也是由多個HTTTP服務(wù)器的
推薦度:
標簽: 影響 主要 http
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 日韩精品1区 | 欧美精品在线免费 | 日韩欧美高清 | 国产91精品久久久久999 | 欧美高清亚洲欧美一区h | 日韩国产免费 | 精品国产一区二区三区免费看 | 亚洲精品第一综合99久久 | 精品一区二区久久久久久久网精 | 自拍偷拍欧美亚洲 | 国产免费精彩视频 | 香港一级a毛片在线播放 | 国产精品一区欧美日韩制服 | 亚洲午夜久久久久中文字幕 | 国精产品一区 | 国产视频不卡 | 特一级大黄在线观看 | 欧美日韩在线视频 | 国产呦系列 欧美呦 日韩呦 | 亚洲精品视频免费在线观看 | 九九久久99综合一区二区 | 国内精品视频在线播放 | 国产精品九九久久精品女同 | 国产在线观看一区二区三区 | 97精品国产91久久久久久久 | 自拍偷拍欧美亚洲 | 日韩国产欧美视频 | 欧美在线观看一区 | 香蕉视频啪啪 | 欧美极品尤物在线播放一级 | 亚洲美女网站 | 国内精品视频 | 福利三区 | 亚洲第一免费视频 | 国产欧美日韩一区二区三区 | 国产91久久久久久久免费 | 亚洲 欧美 中文 日韩欧美 | 欧美一区二区三区在线视频 | 亚洲欧洲在线视频 | 国产成人免费高清激情明星 | 日韩在线二区 |