linux下面的fd限制

2021-09-23 20:15:02 字數 967 閱讀 6149

如果不考慮記憶體大小的限制,在linux下面,fd (即file descriptor)的數量來自2個限制(閾值)。

其一:是作業系統的限制。

這個限制主要是在linux核心中,我們知道,使用者程式的fopen操作最後都通過system call進入到linux kenrel。

linux kernel會對此進行檢查,防止某個使用者占用太多的系統資源。

現在的核心都可以通過sysctl命令在開機的時候來調整。他是不是還有乙個**級別的最大值(如定義了巨集),我沒有仔細研究關於此的**,故不能確定。但據我所知,某些程式開上萬個fd也是有在用的。

命令sysctl fs.file-max=655360可以調整核心的閾值,當然你得有root許可權。想一勞永逸,參考/etc/sysctl.conf,用命令man sysctl.conf

命令sysctl -a可以顯示所有的能夠調整引數。

其二:是使用者程序的限制。

舉例,在bash環境下啟動的程式將繼承bash預設的或使用者定製的限制。

這個限制可以通過bash的內部命令ulimit來調整,當然不能高過作業系統的限制。

比如命令:ulimit -n 20規定了在當前bash環境下執行的程式只能同時開啟20個fd,但是如果你做上面的測試程式,則只有17個。還有3個**去了?動腦筋想一下你應該能找到答案。

ulimit -n 命令只能往下調fd,不能往上調。如果你改的過小了,想反悔?好像只能關閉當前的bash再重新開啟乙個。

那麼,bash又是從**繼承的呢?參考/etc/security/limits.conf,用命令man limits.conf

ulimit -a可以顯示包括fd在內的全部閾值:如最

大資料段大小、最大**段大小、最大棧大小、使用者能建立的程序的最大數目、乙個程序中線程的最大數目。

試試在s2伺服器上執行此命令,結果應該是最大可同時開啟1024個fd。

尋求更多的資訊?老辦法:輸入命令man bash,然後查詢ulimit。

linux下面的fd限制

如果不考慮記憶體大小的限制,在linux下面,fd 即file descriptor 的數量來自2個限制 閾值 其一 是作業系統的限制。這個限制主要是在linux核心中,我們知道,使用者程式的fopen操作最後都通過system call進入到linux kenrel。linux kernel會對此...

linux下面的軟體選擇

我自己用的一些linux軟體,就想起來這些,以後用什麼了再新增。1.瀏覽器 firefox 3.bbs客戶端 qterm 4.查詞 stardict 5.ftp客戶端 kftpgrabber lftp 6.bt客戶端 tran ission 8.中文輸入法 scim python 10.qq客戶端 ...

linux下面的tcp程式設計

首先要建立伺服器建立起socket,然後與本地的埠進行繫結,接著就開始接收客戶端的請求並建立與它的連線,接下來,客戶端傳送的訊息。tcpserver.c int main printf socket id d n sockfd 設定socket in 結構體中相關的引數 server sockadd...