linux文件描述符fd(windows下的句柄)


在Linux系統中一切皆可以看成是文件,文件又可分為:普通文件、目錄文件、鏈接文件和設備文件

fd:file descriptor

文件描述符0,1,2分別給了標准輸入、標准輸出和錯誤輸出。

ls -l /proc/pid/fd可以查看某個進程所使用的fd

 

用lsof可以查看
比如:lsof -i :22 的顯示結果中有一列是FD,這個就是監聽在22號端口的進程打開的文件描述符。比如FD這一列顯示的是3。再使用lsof -d 3就可以查看到,文件描述符3所打開的文件。

 

 

1.    系統最大打開文件描述符數:/proc/sys/fs/file-max

 設置

a.    臨時性

# echo 1000000 > /proc/sys/fs/file-max

b.    永久性:在/etc/sysctl.conf中設置

fs.file-max = 1000000

 

2.    進程最大打開文件描述符數:user limit中nofile的soft limit

a.    查看

$ 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.    查看當前系統使用的打開文件描述符數

[root@localhost bin]# cat /proc/sys/fs/file-nr

5664        0        186405

其中第一個數表示當前系統已分配使用的打開文件描述符數,第二個數為分配后已釋放的(目前已不再使用),第三個數等於file-max。

 

4.    總結:

a.    所有進程打開的文件描述符數不能超過/proc/sys/fs/file-max

b.    單個進程打開的文件描述符數不能超過user limit中nofile的soft limit

c.    nofile的soft limit不能超過其hard limit

d.    nofile的hard limit不能超過/proc/sys/fs/nr_open

 

 

 

 

參考:

http://blog.51cto.com/noican/1733706

https://blog.csdn.net/cywosp/article/details/38965239

https://www.kancloud.cn/kancloud/understanding-linux-processes/52176

https://blog.csdn.net/dlutbrucezhang/article/details/9319577

https://zhuanlan.zhihu.com/p/26609946


免責聲明!

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



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