1. 程式人生 > >Linux最大檔案開啟數

Linux最大檔案開啟數

轉載:https://www.cnblogs.com/pangguoping/p/5791432.html

介紹

在Linux下有時會遇到Socket/File : Can't open so many files的問題。其實Linux是有檔案控制代碼限制的,而且Linux預設一般都是1024(阿里雲主機預設是65535)。在生產環境中很容易到達這個值,因此這裡就會成為系統的瓶頸。

1.檢視方法

使用ulimit -a 或者 ulimit -n

open files (-n) 1024 是linux作業系統對一個程序開啟的檔案控制代碼數量的限制(也包含開啟的套接字數量)

這裡只是對使用者級別的限制,其實還有個是對系統的總限制,檢視系統匯流排制:

# cat /proc/sys/fs/file-max

man proc,可得到file-max的描述:

/proc/sys/fs/file-max
              This  file defines a system-wide limit on the number of open files for all processes.  (See
              also setrlimit(2),  which  can  be  used  by  a  process  to  set  the  per-process  limit,
              RLIMIT_NOFILE,  on  the  number  of  files it may open.)  If you get lots of error messages
              about running out of file handles, try increasing this value:

即file-max是設定系統所有程序一共可以開啟的檔案數量 。同時一些程式可以通過setrlimit呼叫,設定每個程序的限制。如果得到大量使用完檔案控制代碼的錯誤資訊,是應該增加這個值。

 

也就是說,這項引數是系統級別的。

2.修改方法

 臨時生效:

# ulimit -SHn 10000
其實ulimit 命令身是分軟限制和硬限制,加-H就是硬限制,加-S就是軟限制。預設顯示的是軟限制,如果執行ulimit 命令修改時沒有加上-H或-S,就是兩個引數一起改變。

軟限制和硬限制的區別?

硬限制就是實際的限制,而軟限制是警告限制,它只會給出警告。

永久生效

要想ulimits 的數值永久生效,必須修改配置檔案/etc/security/limits.conf
在該配置檔案中新增

* soft nofile 65535   

* hard nofile 65535  

echo "* soft nofile 65535"  >> /etc/security/limits.conf

echo "* hard nofile 65535"  >> /etc/security/limits.conf

* 表示所用的使用者

修改系統總限制

其實上的修改都是對一個程序開啟的檔案控制代碼數量的限制,我們還需要設定系統的總限制才可以。

假如,我們設定程序開啟的檔案控制代碼數是1024 ,但是系統匯流排制才500,所以所有程序最多能開啟檔案控制代碼數量500。從這裡我們可以看出只設置程序的開啟檔案控制代碼的數量是不行的。所以需要修改系統的總限制才可以。

echo  6553560 > /proc/sys/fs/file-max

上面是臨時生效方法,重啟機器後會失效;

永久生效方法:

修改 /etc/sysctl.conf, 加入

fs.file-max = 6553560 重啟生效