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