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