linux最大打開文件句柄數,即打開文件數最大限制,就是規定的單個進程能夠打開的最大文件句柄數量(Socket連接也算在里面,默認大小1024)
liunx中文件句柄有兩個限制,一種是用戶級的,一種是系統級的(也叫內核級)
- 系統級的最大限制:
cat /proc/sys/fs/file-max
- 用戶級的最大限制
ulimit -n(默認是1024,向阿里雲華為雲這種雲主機一般是65535)
附ulimit 參數說明:
選項 [options] | 含義 | 例子 |
-H | 設置硬資源限制,一旦設置不能增加。 | ulimit – Hs 64;限制硬資源,線程棧大小為 64K。 |
-S | 設置軟資源限制,設置后可以增加,但是不能超過硬資源設置。 | ulimit – Sn 32;限制軟資源,32 個文件描述符。 |
-a | 顯示當前所有的 limit 信息。 | ulimit – a;顯示當前所有的 limit 信息。 |
-c | 最大的 core 文件的大小, 以 blocks 為單位。 | ulimit – c unlimited; 對生成的 core 文件的大小不進行限制。 |
-d | 進程最大的數據段的大小,以 Kbytes 為單位。 | ulimit -d unlimited;對進程的數據段大小不進行限制。 |
-f | 進程可以創建文件的最大值,以 blocks 為單位。 | ulimit – f 2048;限制進程可以創建的最大文件大小為 2048 blocks。 |
-l | 最大可加鎖內存大小,以 Kbytes 為單位。 | ulimit – l 32;限制最大可加鎖內存大小為 32 Kbytes。 |
-m | 最大內存大小,以 Kbytes 為單位。 | ulimit – m unlimited;對最大內存不進行限制。 |
-n | 可以打開最大文件描述符的數量。 | ulimit – n 128;限制最大可以使用 128 個文件描述符。 |
-p | 管道緩沖區的大小,以 Kbytes 為單位。 | ulimit – p 512;限制管道緩沖區的大小為 512 Kbytes。 |
-s | 線程棧大小,以 Kbytes 為單位。 | ulimit – s 512;限制線程棧的大小為 512 Kbytes。 |
-t | 最大的 CPU 占用時間,以秒為單位。 | ulimit – t unlimited;對最大的 CPU 占用時間不進行限制。 |
-u | 用戶最大可用的進程數。 | ulimit – u 64;限制用戶最多可以使用 64 個進程。 |
-v | 進程最大可用的虛擬內存,以 Kbytes 為單位。 | ulimit – v 200000;限制最大可用的虛擬內存為 200000 Kbytes。 |
查看某個進程的最大打開文件數和當前打開文件數
先找到該進程的進程號,然后查看/proc/[pid]/limits和fd
/proc/[pid]/limits 顯示當前進程的資源限制
/proc/[pid]/fd 是一個目錄,包含進程打開文件的情況
ps:如果要查看某個進程的線程的詳細信息,/proc/[pid]/task
修改最大限制
用戶級的修改
- 用戶級修改臨時生效方法:(重啟后失效)
ulimit -SHn 10000
ulimit 命令分軟限制和硬限制,加-H就是硬限制,加-S就是軟限制。默認顯示的是軟限制,如果運行ulimit 命令修改時沒有加上-H或-S,就是兩個參數一起改變。硬限制就是實際的限制,而軟限制是警告限制,它只會給出警告。
- 用戶級修改永久有效方式:
vi /etc/security/limits.conf
修改配置文件/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
* 表示所用的用戶,但有的系統不認, 需要具體的用戶名, 比如:
root soft nofile 65535
root hard nofile 65535
重新登錄驗證,或許reboot后驗證。
系統級的修改:
其實上面的修改都是對一個進程打開的文件句柄數量的限制,我們還需要設置系統的總限制才可以。
假如,我們設置進程打開的文件句柄數是1024 ,但是系統總限制才500,所以所有進程最多能打開文件句柄數量500。從這里我們可以看出只設置進程的打開文件句柄的數量是不行的。所以需要修改系統的總限制才可以。
- 系統級修改臨時生效方式:
echo 655350 > /proc/sys/fs/file-max
- 系統級修改永久生效方式:
vi /etc/sysctl.conf
加入 fs.file-max=655350
系統級永久生效方式修改后,重啟服務器,才能生效。
- 查看系統級文件句柄修改,是否生效
sysctl -p