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


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,文件數上限也是歸根到底根據內存的大小決定的

 

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

 

 

原創文章,轉載: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決定

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM