怎么計(jì)算一臺(tái)服務(wù)器最多支持連接數(shù)?
1.在linux下,一個(gè)進(jìn)程最多只能打開(kāi)1024個(gè)文件,因此在這種默認(rèn)配置下,最多可以并發(fā)數(shù)千個(gè)TCP連接。并且通過(guò)臨時(shí)改裝:ulimit-n1000000,可以達(dá)到100萬(wàn)個(gè)TCP連接。但這種臨時(shí)修改只對(duì)當(dāng)前登錄用戶(hù)的當(dāng)前使用環(huán)境有效,在系統(tǒng)重啟或用戶(hù)退出后無(wú)效。
2.端口限制:在操作系統(tǒng)上,1024以下的端口號(hào)是系統(tǒng)保留的,1024到65535的端口號(hào)是用戶(hù)使用的。因?yàn)槊總€(gè)TCP連接都有一個(gè)端口號(hào),所以我們最多可以有超過(guò)60,000個(gè)并發(fā)連接。
3.因此,tcp連接的最大數(shù)量是客戶(hù)端ip×客戶(hù)端端口。對(duì)于ipV4,最大tcp連接數(shù)約為2的32次方(IP數(shù))×2的16次方(端口號(hào)),也就是說(shuō)每臺(tái)服務(wù)器的最大tcp連接數(shù)約為2的48次方。
4.以上給出的結(jié)論都是理論上的單機(jī)TCP并發(fā)連接。實(shí)際上,單機(jī)并發(fā)連接數(shù)必然受到硬件資源(內(nèi)存)和網(wǎng)絡(luò)資源(帶寬)的限制,至少目前能達(dá)到幾十萬(wàn)級(jí)別的并發(fā)。
高并發(fā)得時(shí)候服務(wù)器壓力大,是內(nèi)存的問(wèn)題還是cpu的問(wèn)題?
你好,我我是一名Java開(kāi)發(fā)人員。歡迎關(guān)注我關(guān)于通信行業(yè)代碼的頭條。謝謝大家!
首先,你的問(wèn)題描述了一些問(wèn)題。你的問(wèn)題應(yīng)該是Web應(yīng)用部署在Linux下的Tomcat容器中,高并發(fā)時(shí)服務(wù)器壓力很大。線(xiàn)程的數(shù)量與您的Web程序有關(guān),而與Tomcat無(wú)關(guān)。如果你懷疑線(xiàn)程問(wèn)題,你必須檢查你的程序。這里我告訴你一個(gè)檢查的方法(jstack的jvm性能調(diào)優(yōu)也是我在工作中實(shí)際遇到的問(wèn)題)。
如何使用jstack找到消耗CPU最多的線(xiàn)程并定位代碼jstack是JVM自帶的一個(gè)堆棧跟蹤工具。根據(jù)棧信息,我們可以定位具體的代碼,因此它被廣泛應(yīng)用于JVM性能調(diào)優(yōu)。以下是具體操作流程。
1.使用top命令檢查L(zhǎng)inux服務(wù)器的CPU、內(nèi)存和IO的使用情況。
如果服務(wù)器上的壓力大,是某個(gè)進(jìn)程占用CPU資源太多造成的(這個(gè)問(wèn)題看java進(jìn)程),在頂視圖中可以清楚的看到,高的時(shí)候會(huì)超過(guò)100%。
2.找出java進(jìn)程的PID。
命令:ps-ef|grepjava
進(jìn)入java進(jìn)程的PID21711。
3.找出進(jìn)程中消耗CPU最多的線(xiàn)程。
根據(jù)步驟2中的PID,找出進(jìn)程中消耗CPU最多的線(xiàn)程。您可以使用以下三個(gè)命令:
ps-Lfppid
ps-mppid-o線(xiàn)程,tid,時(shí)間
頂部高壓管道儀表流程圖
TIME記錄每個(gè)線(xiàn)程消耗CPU的時(shí)間,其中PID為21742的線(xiàn)程消耗的時(shí)間最多。
4.使用jstack命令輸出進(jìn)程的堆棧信息,并定位相應(yīng)的代碼。
因?yàn)閖stack輸出的堆棧信息中的線(xiàn)程PID都是十六進(jìn)制的,所以我們需要把第三步中最耗時(shí)的線(xiàn)程21742轉(zhuǎn)換成十六進(jìn)制。我們可以這樣做:
printf%x
21742
21742的十六進(jìn)制值是54ee,將在下面使用。如果你真的可以t寫(xiě),就用計(jì)算器(操作時(shí)輸入calc彈出)。
輸出堆棧信息的Jstack命令:
jstack21711|grep54ee
天哪,原來(lái)問(wèn)題出在ActiveMQ上。當(dāng)Web應(yīng)用程序與ActiveMQ通信時(shí),這是一個(gè)問(wèn)題。查了一下MQ,發(fā)現(xiàn)MQ死了,不能t在IE中打開(kāi)管理控制臺(tái)來(lái)訪(fǎng)問(wèn)MQ。MQ重啟后一切正常。
許多程序員喜歡開(kāi)發(fā)新的需求。;不喜歡修改bug,尤其是一些疑難雜癥。所以很多人對(duì)JVM性能調(diào)優(yōu)知之甚少。事實(shí)上,JVM性能調(diào)優(yōu)是Java中非常重要的知識(shí)點(diǎn),我們必須要了解,尤其是一些JVM調(diào)優(yōu)工具。
如果你有什么疑問(wèn),或者有更好的知識(shí)和經(jīng)驗(yàn),不妨分享出來(lái),共同學(xué)習(xí),共同進(jìn)步。謝謝大家!