nginx+tomcat的keepalive验证、bio/nio连接比较
原文地址:https://blog.csdn.net/shi1122/article/details/50411885
最近剛好有時間找了臺機器壓測了一下,驗證一下自己的一些想法。
很多時候我們會發現實際情況并不如我們所了解,一方面是實際情況并非完美,會受到許多環境的影響,所以結果有時與我們所學理論會相悖,更有甚者,有時在網上了解的理論本身或過時,或并不正確,所以在有機會、抑或有條件的情況,可是實驗一下自己所學,這也可加深理解。
用jmeter進行壓力測試,如:
根據網上的其中一種說法,只需在nginx中加上:
[html] view plain copy
proxy_http_version 1.1;
即可實現長連接,在nginx中開啟了以后,抓包 :
[html] view plain copy
tcpdump tcp -i lo port 8081 -w tomcat.cap
抓包以后用wireshark看看目標請求的head,發現有connection:close,說明連接并非長連接。
繼續在upstream中加上keepalive,抓包看,還是帶上了connection:close。
繼續在nginx中主動加上connection:keepalive,再次抓包,終于保持連接了。
抓nginx的的包,可以看到有keepalive:
采用bio,加keepalive,500并發req的情況下:
采用nio,500并發req的情況下:
從上面的截圖,可以看到結果基本跟預料的一直,bio的情況下,線程會比較多,1k多,基本比nio情況下多1k,也因此VIRT內存會占用更多,以單線程占1m,多1k線程,基本也要多占用1g左右的內存。
因此到底要用那種連接,還是要看實際情況,如果要做網絡接入層,當然會用nio,不然要同時承受那么多的并發連接,哪來這么多的資源給消耗,不過估計不會有人拿它做接入層吧!
轉載于:https://blog.51cto.com/summerflowers/2114827
總結
以上是生活随笔為你收集整理的nginx+tomcat的keepalive验证、bio/nio连接比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven jetty运行时,js无法保
- 下一篇: Python中操作mysql知识(一)