1.爲何linux最大端口數是65535個linux
答:由於IP的端口是雙字節,因此也就是2*16,因此端口號是0-65536,可是0通常不用,因此是65535個端口,這也是linux本地最大的端口數,所以本地能監聽65535個端口nginx
2.文件的最大打開數web
答:(1)在操做系統中,最大打開文件數有soft和hard限制之分,而soft<=hard,soft限制了打開文件的數值,而hard限制了soft的最大值,實際文件打開數毫不會超過soft的值服務器
(2)雖然在操做系統中的/etc/security/limits.conf文件中,咱們是分用戶進行文件打開書限制的,所以,不一樣的用戶最大文件打開數不一樣,可是,實際上最大文件打開數限制的是用戶單個進程的最大打開數。以1024爲例,屬於普通用戶的任意一個進程最大打開文件數都不能超過1024,可是該用戶全部的進程加起來文件打開總數是沒有限制的,好比總的打開文件數多是10000,甚至更多。網絡
(3)即便是用一個程序,屢次打開同一個文件,文件打開數也會累加,並不會看做是隻有一個打開文件數socket
3.關於網絡鏈接對文件打開數的影響操作系統
答:只要有一個listening和established狀態的網絡鏈接,就會佔用一個文件打開數。因此,在web應用的訪問量稍大時,若是是單進程的話,即便不算應用自己打開的常規文件,因爲網絡鏈接數過多,也會致使超過設置的最大文件打開數。(根據man文檔中的說法,一個打開文件多是一個常規文件、一個目錄、一個塊設備文件、一個字符設備文件、一個正在執行的文件引用、一個庫、一個流或一個網絡文件(網絡socket,NFS文件或UNIX socket)。因此,網絡鏈接也算。我估計,這多是由於在程序中,要訪問這些對象時,都有點相似於訪問文件那樣,須要打開)對象
4.是否修改了/etc/security/limits.conf文件中的ulimit限值(包括打開文件數)後,就能保證它對全部的程序生效?繼承
這是錯誤的。事實上來講,limits.conf文件中的限值對經過啓動腳原本啓動的程序並不生效。好比,nginx程序有一個啓動腳本/etc/init.d/nginx並設置了開機啓動。那麼,即使你修改了limits.conf文件中的限值,當服務器重啓後,nginx程序自動啓動了,它的ulimit限值將還會是默認值,而不會是你設置的值。固然,若是你此時登陸進系統,並經過nginx開機啓動腳本重啓了nginx程序,nginx進程的ulimit限值天然會變爲你在limits.conf文件中設置的限值。進程
關於這個問題的緣由,我也沒有找到什麼權威的資料說明,但我估計多是這樣的。以CentOS 6系統爲例,由於系統啓動時,系統中的全部進程都是由第一支程序/sbin/init帶起的。而limits.conf文件中的限值對/sbin/init程序並不生效,因此/sbin/init進程的ulimit限值仍然是默認值。這就致使它所啓動的全部子進程,即系統中的全部其它程序,都繼承它的ulimit限值,即默認值。
一個程序能夠監聽n多個端口,這個對與linux的65535個端口是沒有關係的,一個網卡監聽65535個端口,n個網口就是n * 65535。