1. 系統最大打開文件描述符數:/proc/sys/fs/file-max
a. 查看
$ cat /proc/sys/fs/file-max
186405
2. 設置
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
170000
b. 設置
1). 臨時性:
通過ulimit -Sn設置最大打開文件描述符數的soft limit,注意soft limit不能大於hard limit(ulimit -Hn可查看hard limit),另外ulimit -n默認查看的是soft limit,但是ulimit -n 180000則是同時設置soft limit和hard limit。對於非root用戶只能設置比原來小的hard limit。
(1)查看hard limit:
$ ulimit -Hn
170000
(2)設置soft limit,必須小於hard limit:
$ ulimit -Sn 160000
2). 永久性:
上面的方法只是臨時性的,注銷重新登錄就失效了,而且不能增大hard limit,只能在hard limit范圍內修改soft limit。若要使修改永久有效,則需要在/etc/security/limits.conf中進行設置(需要root權限),可添加如下兩行,表示所有用戶最大打開文件描述符數的soft limit為102400,hard limit為104800。以下設置需要注銷之后重新登錄才能生效:
在/etc/security/limits.conf中添加如下內容:
* soft nofile 102400
* hard nofile 104800
注意:設置nofile的hard limit還有一點要注意的就是hard limit不能大於/proc/sys/fs/nr_open,假如hard limit大於nr_open,注銷后將無法正常登錄。
可以修改nr_open的值:
# echo 200000 > /proc/sys/fs/nr_open
3. 查看當前系統使用的打開文件描述符數
$ 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