久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Nginx啟動配置加載性能的示例分析

167次閱讀
沒有評論

共計 2487 個字符,預計需要花費 7 分鐘才能閱讀完成。

這篇文章主要為大家展示了“Nginx 啟動配置加載性能的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“Nginx 啟動配置加載性能的示例分析”這篇文章吧。

一、測試內容

腳本創建 3 類配置文件, 規則如下:

1. 共創建 2 萬條 Server{} 配置

2. server_name 基本定長, PerformanceTestxxx

3. 第 1 類是 listen 的 IP 完全一致,port 全不同, 配置文件實例:

http{ server{ listen 192.168.0.1:8080; server_name PerformanceTest8080; }  hellip; server{ listen 192.168.0.1:8081; server_name PerformanceTest8081;  hellip;. } }

3. 第 2 類是 listen 的 Port 完全一致,IP 全不同, 配置文件實例:

http{ server{ listen 192.168.0.1:80; server_name PerformanceTest1; }  hellip; server{ listen 192.168.0.2:80; server_name PerformanceTest2;  hellip;. } }

4. 第 3 類是 listen 的 IP:PORT 完全一致, server_name 全不同, 配置文件實例:

http{ server{ listen 192.168.0.1:80; server_name PerformanceTest001; }  hellip; server{ listen 192.168.0.1:80; server_name PerformanceTest002;  hellip;. } }

二、測試數據

對于 3 類配置, 再加入 3 組變量:

1. 不配置 server_name

2. server_name 全配置一樣

3. server_name 全配置不一樣

看 server_name 對于初始化速度的影響

9 種組合的性能如下:

Nginx 啟動配置加載性能的示例分析

nginx 啟動時間:time ./nginx -c /root/nginx.conf.sameport.noloc

nginx reload 時間:time ./nginx -c /root/nginx.conf.sameport.noloc ndash;s reload

從測試數據可以看出, 對 nginx 啟動速度影響的因素為 server{} 中 listen 的 port,server_name 指令基本無影響。

三、原因分析

3.1 http{} 初始化流程簡單介紹:

Nginx 啟動配置加載性能的示例分析

解析配置文件是遞歸地調用 ngx_conf_parse 函數完成的, http{} 配置塊的解析流程:

1. 解析到 http 指令, 執行 ngx_http_block 函數, 創建 http module 的配置上下文后, 繼續 ngx_conf_parse 解析 http{} 內部的內容;

2. 解析到 server 指令, 執行 ngx_http_core_server 函數, 創建該 server{} 的配置上下文后, 繼續 ngx_conf_parse 解析 server{} 內部的內容;

3. 解析到 listen 指令, 添加到 cscf 以及 cmcf 配置中, 如下圖:

1. cmcf- servers 數組保存了所有監聽的 server 數據

Nginx 啟動配置加載性能的示例分析

2. cmcf- ports 數組保存了所有 port 匯聚的 ip 的數據. listen 同一個 ip:port, server_name 不同的 srv_conf 會掛在 ngx_http_conf_addr_t 的 servers 數組下。

Nginx 啟動配置加載性能的示例分析

一個配置好的樣子可能是這樣:

Nginx 啟動配置加載性能的示例分析

3.2 耗時位置定位

代碼中加變量記錄函數耗時總時間, 得到啟動時耗時在 2 個步驟:

1) 解析配置文件, 對應 ngx_conf_parse 函數

2) 初始化 socket, 對應 ngx_open_listening_sockets 函數

Nginx 啟動配置加載性能的示例分析

3.3 ngx_conf_parse 耗時分析

主要是 ngx_http_block 函數的耗時, 分為以下 2 個部分:

Nginx 啟動配置加載性能的示例分析

很明顯, ngx_http_add_addresses 函數的性能消耗在對相同 port 已存在 ip 的查找上面, 這里用的是線性的遍歷查找,

且需要進行字符串比較 ngx_memcmp 被執行了 2w*2w 共 4 億次:

for (i = 0; i   port- addrs.nelts; i++) { //  遍歷查找,  如果配置文件中, 相同 port 的 IP 過多, 字符串比較帶來較大性能問題, 2w 個 listen, 這一塊耗時需要 8s 左右  if (ngx_memcmp(p, addr[i].opt.u.sockaddr_data + off, len) != 0) { continue; } /* the address is already in the address list */ //  找到對應的 ip,  添加 cscf 到 IP if (ngx_http_add_server(cf, cscf,  addr[i]) != NGX_OK) { return NGX_ERROR; }

3.4 ngx_open_listening_sockets 耗時分析

函數中初始化所有 listening 的 socket

/* for each listening socket */ ls = cycle- listening.elts; for (i = 0; i   cycle- listening.nelts; i++) { if (bind(s, ls[i].sockaddr, ls[i].socklen) == -1) {  hellip;  hellip; if (listen(s, ls[i].backlog) == -1) { }

Nginx 啟動配置加載性能的示例分析

對于同 1 個 IP,新建不同 port 的 socket 相比新建多個不同 IP 的 socket 更省時間。

以上是“Nginx 啟動配置加載性能的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計2487字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 邵武市| 宜良县| 马关县| 蕉岭县| 滦平县| 平利县| 米泉市| 本溪市| 昭苏县| 济南市| 左贡县| 石城县| 琼结县| 丰台区| 勃利县| 祥云县| 固镇县| 万年县| 洛南县| 西丰县| 汨罗市| 宁强县| 临洮县| 弥渡县| 靖远县| 新竹市| 阳曲县| 太原市| 静海县| 威海市| 确山县| 陈巴尔虎旗| 甘泉县| 亚东县| 灵璧县| 栾城县| 桃江县| 明溪县| 黄骅市| 永丰县| 陇南市|