nginx+tomcat的keepalive驗證、bio/nio連接比較

原文地址:https://blog.csdn.net/shi1122/article/details/50411885
最近剛好有時間找了臺機器壓測了一下,驗證一下自己的一些想法。

很多時候我們會發現實際情況並不如我們所瞭解,一方面是實際情況並非完美,會受到許多環境的影響,所以結果有時與我們所學理論會相悖,更有甚者,有時在網上了解的理論本身或過時,或並不正確,所以在有機會、抑或有條件的情況,可是實驗一下自己所學,這也可加深理解。

  1. nginx+tomcat keepalive驗證

用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:

  1. bio及nio連接下進行簡單的壓測

採用bio,加keepalive,500併發req的情況下:

採用nio,500併發req的情況下:

從上面的截圖,可以看到結果基本跟預料的一直,bio的情況下,線程會比較多,1k多,基本比nio情況下多1k,也因此VIRT內存會佔用更多,以單線程佔1m,多1k線程,基本也要多佔用1g左右的內存。

因此到底要用那種連接,還是要看實際情況,如果要做網絡接入層,當然會用nio,不然要同時承受那麼多的併發連接,哪來這麼多的資源給消耗,不過估計不會有人拿它做接入層吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章