亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

記一次壓力測試和對nginx/tomcat配置的調整

系統 1885 0

原文地址:還沒找到

是一個web系統,前端使用nginx做為反向代理,處理https,并將請求轉發給后端的tomcat服務。?

壓力測試工具選擇了jmeter。 首先簡單介紹一下jmeter。 它是apache的一個開源項目,基于java swing開發的GUI界面。?
jmeter提供了許多高級的功能,但我們僅僅使用了jmeter最簡單的功能。在簡單的jmeter使用中,我們涉及到這么幾個概念:測試計劃,線程組,測試任務,和Listener。看下面的圖:?

在一個名為“測試”的測試計劃下, 我們建立了一個線程組。 這個線程組可以設置線程數,創建時間(在多長時間內創建出這么多個線程),每個線程任務循環執行次數。 然后為這個線程組指派了一個http請求任務。 這個任務可以指定協議(http或https),服務器, url,參數等。

接下來為這個http請求任務添加了一個aggregate graph類型的listener。 我們需要看最終的測試結果, 這個listener就是為我們記錄并展示結果的。

一切設置就緒之后,點擊主界面上邊的“啟動”按鈕,就可以在aggregate graph中觀看測試結果了。?
我們所測試的后端tomcat,執行了一次mysql 數據庫 的查詢請求,并執行了一次通過http協議請求內網其它服務器的遠程請求。

嘗試著調整并發壓力測試的線程數,發現吞QPS留在600/sec,始終無法提升, 而此時cpu的消耗只有40%左右,顯然cpu還未到瓶頸。 而https處理和這樣的web server,根據經驗瓶頸一般出現在cpu上,為什么cpu還未到達瓶頸,qps就上不去了呢。

接下來我們在nginx的access log中增加了 $request_time這一項, 在tomcat服務中也打了日志觀測執行時間。 發現nginx的時間遠大于tomcat的處理時間。 原來瓶頸點在nginx這里。?
嘗試優化一下nginx的參數,第一個看到的是,由于這是一臺測試機,nginx采用的大部分配置都是默認設置,worker_processes參數被設置為1. 把這個數字調整為4的時候, QPS提升到了 1200, cpu利用率達到了99%. 看來這個就是這臺測試機硬件配置的極限了。

那么單個worker_processes的時候,為什么cpu利用率上不去,java進程尚未充分利用硬件資源,而nginx先到達瓶頸呢? 對比測試一下, 當訪問硬盤上一個靜態 html 頁面的時候, 單個worker進程qps可以達到9000+。靜態資源和proxy_pass的差別在于讀取本地磁盤文件(可能有內存緩存),和向后端建立socket連接。團隊里的技術大牛通過strace跟蹤了一下,也未找出明顯的問題根源,推測是在向后端建立連接的地方會出現排隊等待現象。

在我們壓測的過程中, 通過netstat命令可以看到有很多nginx向tomcat發起的連接。 這些連接都是短連接,每次用完即關閉。于是想到nginx向后端源服務器能否建立長連接的問題。查看了一下文檔,nginx從1.1.4版本開始,支持proxy_pass的時候向后端源服務器建立長連接。

根據官網的描述,若采用長連接,必須在proxy_pass的時候使用upstream的方式, 直接把后端源寫在proxy_pass后邊是不行的。 具體的配置方式如下:?
定義upstream:?
upstream lich {?
server 127.0.0.1:8081;?
keepalive 128;?
}

proxy_pass的地方:?
proxy_pass http://lich;?
proxy_http_version 1.1;?
proxy_set_header Connection "";

官方文檔在這里:http://nginx.org/en/docs/http/ngx_http_upstream_module.html?
官方文檔中說:proxy_http_version和proxy_set_header這兩個配置是需要加上的。
不建議使用http 1.0通過Connection:Keep-Alive的方式。

配置完成之后重新測試,qps略微有一點提升。 但并不明顯。 為了驗證長連接是否生效, 同樣通過 netstat命令查看連接。 發現連接到后端8081端口的nginx開啟的臨時端口不停的發生變化, 這證明了仍然是在采用短鏈接的方式。 那么是誰先關閉連接的呢。?

通過tcpdump抓包發現, 首先發出 Fin 包的是tomcat。 也就是說, tomcat主動關閉的連接。

?

原來在tomcat的配置文件中, 有關于keepalive的幾個參數。 包括每一個連接完成多少個http請求之后就關閉等。 詳細的參數可以參見tomcat的文檔。詳細的文檔應該看這里:https://tomcat.apache.org/tomcat-7.0-doc/config/http.html

對tomcat的connector進行了一些調整(包括maxKeepAliveRequests和keepAliveTimeout兩個參數,都設置成-1)之后, 再看連接,已經不會頻繁斷開并重建了。 QPS也提升到了900+.

盡管如此, nginx仍然是瓶頸,worker_processes設置為4個的時候,cpu可以利用到100%, QPS可以達到1200.

最后再做一個對比, 當jmeter繞過nginx,不走https而直接訪問http的端口8081時,qps可以達到1500+。對比一下,對https的開銷大概有個概念。

記一次壓力測試和對nginx/tomcat配置的調整


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲欧美综合精品成 | 色综合精品久久久久久久 | 国产中文字幕久久 | 一本色道久久综合亚洲精品高清 | 国产高清自拍 | 色猫咪av在线网址 | www.男人的天堂.com | 精品国产视频在线观看 | 亚洲综合区小说区激情区噜噜 | 国产色av | 国产性大片黄在线观看在线放 | 一级特黄性色生活片一区二区 | 手机看片日韩国产一区二区 | 毛片激情永久免费 | 久久天堂夜夜一本婷婷麻豆 | 九九九精品视频免费 | 国产三级日产三级日本三级 | 精品无码久久久久国产 | 亚洲欧美中文字幕在线网站 | 亚洲国产综合精品 | 久久综合九色综合97_ 久久久 | 成人a毛片免费全部播放 | 四虎影视国产永久免费 | 国产一及毛片 | 天天爱天天爽 | 色综合久久久久久 | 免费永久欧美性色xo影院 | 欧美激情视频网址 | 91亚洲国产成人久久精品网址 | 亚洲免费福利视频 | 国产精品国产三级国产专区5o | 精品无人区乱码一区2区3区 | 看一下毛片 | 精品小视频在线观看 | 91视频看| 久久国产视频网 | 久久精品国产精品亚洲20 | 天堂一区二区三区在线观看 | 日韩欧美一区二区三区在线 | 特黄特黄一级片 | 国产精品视频久 |