1. 程式人生 > >Socket TCP Server一個端口可以有多少個長連接?受到什麽影響?linux最大文件句柄數量總結

Socket TCP Server一個端口可以有多少個長連接?受到什麽影響?linux最大文件句柄數量總結

span 修改配置 clas font not aid 設置 重新 href

Socket TCP Server一個端口可以有多少個長連接?

網上答案很多,不知道那個才是正確的

理論上是無限的

16、Linux中,一個端口能夠接受tcp鏈接數量的理論上限是?

A.1024

B.65535

C.65535 * 65535

D.無上限

參考答案:D

重點:但是會受到打開的最大文件數量和內存決定的

Linux上連接數,理論上可以達到沒有上限,但實際上由於Linux中一切都是文件,Linux允許打開的文件的句柄數的上限決定...

Linux允許打開的文件的句柄數的上限為65535?.

沒有修改配置情況下,查看 ulimit -n 是1024, 但是可以修改的 具體是根據內存決定的 ,不知道網上所說的上限為65535

是為什麽?

因為ulimit -n 是限制用戶的打開文件的最大上限,可以修改,決定於limits.conf的值

ulimit -nlimits.conf裏最大文件數設定不能超過/proc/sys/fs/file-max的值,這也是搞笑了,

/proc/sys/fs/file-max是系統給出的建議值,系統會計算資源給出一個和合理值,一般跟內存有關系,內存越大,改值越大,但是僅僅是一個建議值,limits.conf的設定完全可以超過/proc/sys/fs/file-max

那麽可以 總結出 一個端口可以有多少個長連接 是無限個的,ulimit -n 的上限也不是 65535,文件數上限也是歸根到底根據內存的大小決定的

註:有不同答案的望指正、評論

linux最大文件句柄數量總結

原創文章,轉載:http://jameswxx.iteye.com/blog/2096461

寫這個文章是為了以正視聽,網上的文章人雲亦雲到簡直令人發指。到底最大文件數被什麽限制了?

shell級限制
通過ulimit -n修改,如執行命令ulimit -n 1000,則表示將當前shell的當前用戶所進程能打開的最大文件數量設置為1000.

ulimit -n

非root用戶只能越設置越小,不能越設置越大 我在機器上以非root先執行: [wxx@br162 etc]$ ulimit -n 900
[wxx@br162 etc]$
執行成功,再增大: [wxx@br162 etc]$ ulimit -n 901
-bash: ulimit: open files: cannot modify limit: Operation not permitted
[wxx@br162 etc]$ 增加失敗,如果減少則是OK的: [wxx@br162 etc]$ ulimit -n 899
[wxx@br162 etc]$ 如果再增加到900是不行的: [wxx@br162 etc]$ ulimit -n 900
-bash: ulimit: open files: cannot modify limit: Operation not permitted
root用戶不受限制 首先切換到root: [wxx@br162 etc]$ sudo su -
[root@br162 ~]#
查看下當前限制: [root@br162 ~]# ulimit -n
1000000
[root@br162 ~]# 增大: [root@br162 ~]# ulimit -n 1000001 [root@br162 ~]# 可以成功增大,再減小: [root@br162 ~]# ulimit -n 999999
[root@br162 ~]# 減小也是成功的,再增大: [root@br162 ~]# ulimit -n 1000002 [root@br162 ~]# 也是ok的,可見root是不受限制的。 ulimit裏的最大文件打開數量的默認值 如果在limits.conf裏沒設置,則默認值是1024,如果limits.con設置,則默認值以limits.conf為準。例如我換了一臺機器,登錄進去,ulimit -n顯示如下: [root@zk203 ~]# ulimit -n
2000
這是因為我的limits.conf裏的文件打開數是2000,如下: [root@zk203 ~]# cat /etc/security/limits.conf root soft nofile 2000
root hard nofile 2001 如果limits.conf裏不做任何限制,則重新登錄進來後,ulimit -n顯示為1024。 [root@zk203 ~]# ulimit -n 1024 ulimit修改後生效周期 修改後立即生效,重新登錄進來後失效,因為被重置為limits.conf裏的設定值

二 /etc/security/limits.conf

網上還繆傳,ulimit -n設定的值不能超過limits.conf裏設定的文件打開數(即soft nofile) 好吧,其實這要分兩種情況,root用戶是可以超過的,比如當前limits.conf設定如下: root soft nofile 2000
root hard nofile 2001 但是我用root將最大文件數設定到5000是成功的: [root@zk203 ~]# ulimit -n 5000
[root@zk203 ~]# ulimit -n
5000
[root@zk203 ~]#
但是非root用戶是不能超出limits.conf的設定,我切換到wxx,執行命令如下: [wxx@zk203 ~]# ulimit -n 5000 -bash: ulimit: open files: cannot modify limit: Operation not permitted
所以網上的說法是錯誤的,即使非root用戶的最大文件數設置不能超過limits.conf的設置,這也只是一個表象,實際上是因為,每個用戶登錄進來,ulimit -n的默認值是limits.conf的?0?2soft nofile指定的,但是對於非root用戶,ulimit -n只能越來越小,不能越來越大,其實這個才是真正的原因,但是結果是一樣的。 修改了limits.conf需要重啟系統? 這個說法非常搞笑,修改了limits.conf,重新登錄進來就生效了。在機器上試試就知道了,好多人真的很懶,寧願到處問也不願意花一分鐘時間實際操作一下。

三 /proc/sys/fs/file-max

網上說,ulimit -n 和limits.conf裏最大文件數設定不能超過/proc/sys/fs/file-max的值,這也是搞笑了,/proc/sys/fs/file-max是系統給出的建議值,系統會計算資源給出一個和合理值,一般內存關系,內存越大,改值越大,但是僅僅是一個建議值,limits.conf的設定完全可以超過/proc/sys/fs/file-max。 [root@zk203 ~]# cat /proc/sys/fs/file-max
1610495 我將limits.conf裏文件最大數量設定為1610496,保存後,打印出來: [root@zk203 ~]# cat /etc/security/limits.conf root soft nofile1610496 root hard nofile1610496

四?0?2 總結一下

  • /proc/sys/fs/file-max限制不了/etc/security/limits.conf
  • 只有root用戶才有權限修改/etc/security/limits.conf
  • 對於非root用戶,/etc/security/limits.conf會限制ulimit -n,但是限制不了root用戶
  • 對於非root用戶,ulimit -n只能越設置越小,root用戶則無限制
  • 任何用戶對ulimit -n的修改只在當前環境有效,退出後失效,重新登錄新來後,ulimit -n由limits.conf決定
  • 如果limits.conf沒有做設定,則默認值是1024
  • 當前環境的用戶所有進程能打開的最大問價數量由ulimit -n決定

Socket TCP Server一個端口可以有多少個長連接?受到什麽影響?linux最大文件句柄數量總結