導航:首頁 > 文件類型 > linux修改文件描述符

linux修改文件描述符

發布時間:2023-03-14 03:35:23

1. 如何在 linux 下調整可打開文件/文件描述符數目

人們常說linux最大有65536個文件描述符,是由於常用linux內核的默認值決定的,實際上專是可以通過修改內核屬突破的。
了解下文件描述符,內核(kernel)利用文件描述符(file descriptor)來訪問文件。文件描述符是非負整數。打開現存文件或新建文件時,內核會返回一個文件描述符。讀寫文件也需要使用文件描述符來指定待讀寫的文件。
文件描述符的有效范圍是 0 到 OPEN_MAX。一般來說,每個進程最多可以打開 64 個文件(0 — 63)。對於 FreeBSD 5.2.1、Mac OS X 10.3 和 Solaris 9 來說,每個進程最多可以打開文件的多少取決於系統內存的大小,int 的大小,以及系統管理員設定的限制。Linux 2.4.22 強制規定最多不能超過 1,048,576 。

2. 如何在 Linux 下調整可打開文件/文件描述符數目

進程最大打開文件描述符數:user limit中nofile的soft limita. 查看
$ ulimit -n
1700000
2. 設置
a. 臨時性:通過ulimit -Sn設置最大打開文件描述符數的soft limit,注意soft limit不能大於hard limit(ulimit -Hn可查看hard limit),另外ulimit -n默認查看的是soft limit,但是ulimit -n 1800000則是同時設置soft limit和hard limit。對於非root用戶只能設置比原來小的hard limit。
查看hard limit:
$ ulimit -Hn
1700000
設置soft limit,必須小於hard limit:
$ ulimit -Sn 1600000
2. 永久性:上面的方法只是臨時性的,注銷重新登錄就失效了,而且不能增大hard limit,只能在hard limit范圍內修改soft limit。若要使修改永久有效,則需要在/etc/security/limits.conf中進行設置(需要root許可權),可添加如下兩行,表示用戶chanon最大打開文件描述符數的soft limit為1800000,hard limit為2000000。以下設置需要注銷之後重新登錄才能生效:
chanon soft nofile 1800000
chanon hard nofile 2000000
設置nofile的hard limit還有一點要注意的就是hard limit不能大於/proc/sys/fs/nr_open,假如hard limit大於nr_open,注銷後無法正常登錄。可以修改nr_open的值:
# echo 2000000 > /proc/sys/fs/nr_open

3. linux 文件描述符最大是多少

人們常說linux最大有65536個文件描述符,是由於常用linux內核的默認值決定的,實際上是可以通過修改內核突破的。
了解下文件描述符,內核(kernel)利用文件描述符(file descriptor)來訪問文件。文件描述符是非負整數。打開現存文件或新建文件時,內核會返回一個文件描述符。讀寫文件也需要使用文件描述符來指定待讀寫的文件。
文件描述符的有效范圍是 0 到 OPEN_MAX。一般來說,每個進程最多可以打開 64 個文件(0 — 63)。對於 FreeBSD 5.2.1、Mac OS X 10.3 和 Solaris 9 來說,每個進程最多可以打開文件的多少取決於系統內存的大小,int 的大小,以及系統管理員設定的限制。Linux 2.4.22 強制規定最多不能超過 1,048,576 。

4. linux文件描述符

Linux 下,一切皆文件

在Linux操作系統中,可以將一切都看作是文件,包括普通文件,目錄文件,字元設備文件(如鍵盤,滑鼠…),塊設備文件(如硬碟,光碟機…),套接字等等,所有一切均抽象成文件,提供了統一的介面,方便應用程序調用。

既然在Linux操作系統中,你將一切都抽象為了文件,那麼對於一個打開的文件,我應用程序怎麼對應上呢?

文件描述符應運而生。

文件描述符:File descriptor,簡稱fd,當應用程序請求內核打開/新建一個文件時,內核會返回一個文件描述符用於對應這個打開/新建的文件,其fd本質上就是一個 非負整數 。實際上,它是一個索引值,指向 內核為每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時,內核向進程返回一個文件描述符。 在程序設計中,一些涉及底層的程序編寫往往會圍繞著文件描述符展開。但是文件描述符這一概念往往只適用於UNIX、Linux這樣的操作系統。

操作系統的核心叫內核,是一個獨立的軟體。

操作系統為每一個進程維護了一個文件描述符表,該表的索引值都從從0開始的,所以在不同的進程中可以看到相同的文件描述符,這種情況下相同的文件描述符可能指向同一個文件,也可能指向不同的文件,具體情況需要具體分析,下面用一張簡圖就可以很容易的明白了。

通過上圖可以看到,當不同進程中出現相同的文件描述符時,可能實際對應的文件並不是同一個,相反不同進程中不同的文件描述符也可可能對應同一個文件。

當一個應用程序剛剛啟動的時候,0是標准輸入,1是標准輸出,2是標准錯誤。如果此時去打開一個新的文件,它的文件描述符會是3。POSIX標准要求每次打開文件時(含socket)必須使用當前進程中最小可用的文件描述符號。

文件描述符是一個重要的系統資源,理論上系統內存多大就應該可以打開多少個文件描述符,但是實際情況是,內核會有系統級限制,以及用戶級限制(不讓某一個應用程序進程消耗掉所有的文件資源,可以使用ulimit -n 查看)。

進程 + 文件描述符ID確認,因為內核為每個進程都有一份其所屬的文件描述符表。

所以linux下兩個進程返回的文件描述符是不一樣的

多個進程之間的fd:

應用程序進程拿到的 文件描述符ID 對應 進程文件描述符表 的索引,通過索引拿到 文件指針 ,指向系統級文件描述符表的 文件偏移量 ,再通過文件偏移量找到 inode指針 ,最終對應到真實的文件。

5. 【fd】Linux文件描述符

在Linux下一切資源皆文件,普通文件是文件,磁碟列印機是文件,socket 當然也是文件。

關於Linux下系統,進程能最大能打開的文件描述符數看過好多文章,但大都沒有完整,詳細說明每個值表示什麼意思,在實踐中該怎麼設置?

如何通過最簡單的設置來實現最有效的性能調優,如何在有限資源的條件下保證程序的運作?

max-file 表示系統級別的能夠打開的文件句柄的數量,是對整個系統的限制,並不是針對用戶的。

ulimit -n 控制進程級別能夠打開的文件句柄的數量,提供對shell及其啟動的進程的可用文件句柄的控制,這是進程級別的。

對於伺服器來說,file-max和ulimit都需要設置,否則會出現文件描述符耗盡的問題。

一般如果遇到文件句柄達到上限時,會碰到"Too many open files"或者Socket/File: Can』t open so many files等錯誤。

相關的3個文件:
/proc/sys/fs/file-max
/proc/sys/fs/file-nr
/etc/security/limits.conf

/proc/sys/fs/file-max
Linux系統級別限制所有用戶進程能打開的文件描述符總數。
max-file 表示系統級別的能夠打開的文件句柄的數量,是對整個系統的限制,並不是針對用戶的。

/etc/security/limits.conf
用戶級別的限制是通過可以通過命令ulimit命令和文件/etc/security/limits.conf

/proc/sys/fs/file-nr 該參數是只讀的,不能修改。

file-nr的值由3部分組成:
1,已經分配的文件描述符數;
2,已經分配但未使用的文件描述符數;
3,內核最大能分配的文件描述符數

/proc/${pid}/fd

眾所周知,在相應進程的/proc/$pid/fd 目錄下存放了此進程所有打開的fd。
當然有些可能不是本進程自己打開的,如通過fork()從父進程繼承而來的。

那麼這個socket:後面的一串數字是什麼呢?其實是該socket的inode號。

那麼,知道了某個進程打開的socket的inode號後,我們可以做什麼呢?
這就涉及到/proc/net/tcp(udp對應/proc/net/udp)文件了,其中也列出了相應socket的inode號通過比對此欄位,我們能在/proc/net/tcp下獲得此套介面的其他信息,如對應的<本地地址:埠號,遠端地址:埠號>對,窗口大小,狀態等信息。
具體欄位含義詳見net/ipv4/tcp_ipv4.c 中的 tcp4_seq_show 函數。

如果socket創建了,沒有被使用,那麼就只會在/proc/pid/fd下面有,而不會在/proc/net/下面有相關數據。

目錄中的每一項都是一個符號鏈接,指向打開的文件,數字則代表文件描述符。
其中0 = /dev/null ,1 = stdout, 2 = stderr,用cat或tail查看即可。

Number of file descriptors: different between /proc/sys/fs/file-nr and /proc/$pid/fd?
https://serverfault.com/questions/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc-pi

Linux中最大文件描述符數
https://leokongwq.github.io/2016/11/09/linux-max-fd.html

How do linux file descriptor limits work?
https://stackoverflow.com/questions/3991223/how-do-linux-file-descriptor-limits-work

limits.conf(5) - Linux man page
https://linux.die.net/man/5/limits.conf

Why can't I tail -f /proc/$pid/fd/1 ?
https://unix.stackexchange.com/questions/152773/why-cant-i-tail-f-proc-pid-fd-1

Linux查看進程運行輸出(/proc/<pid>/fd)
https://blog.csdn.net/u014756245/article/details/120023188

6. Linux下可打開文件描述符的最大數如何增大

執行ulimit -a,可以顯示可打開的最大文件數。
一般是1024,這是默認值;
要修改可以在root許可權下
執行ulimit -n 65536修改即可,這里只是一個例子。

閱讀全文

與linux修改文件描述符相關的資料

熱點內容
手機里暴風隱藏文件路徑 瀏覽:49
win10備份系統文件好大 瀏覽:293
js導出html到excel 瀏覽:725
c游戲編程用什麼軟體 瀏覽:645
java依賴倒置 瀏覽:166
華為暢玩5x微信運動 瀏覽:819
applepay必須改美國時間 瀏覽:893
max文件默認打開方式 瀏覽:466
拆遷農民要看的有哪些文件 瀏覽:351
蘋果手機鈴聲的文件後綴 瀏覽:352
什麼東西代表了編程 瀏覽:698
網路中心如何關閉 瀏覽:258
k3編程是什麼意思 瀏覽:296
vba和sql資料庫哪個好 瀏覽:38
u啟王u盤啟動盤製作工具 瀏覽:228
深入理解android網路編程 瀏覽:615
javah無法訪問 瀏覽:11
keyvalue內存資料庫 瀏覽:446
2016年淘寶店鋪裝修教程 瀏覽:394
哪個地區把編程納入高考范圍中了 瀏覽:327

友情鏈接