如何在 Linux 伺服器上設定 ulimit 和檔案描述符數限制
簡介:在生產環境中遇到開啟檔案數這類的挑戰如今已是司空見慣的事情了。因為許多應用程式是基於 Java 和 Apache 的,安裝和配置它們可能會導致開啟過多的檔案(檔案描述符)。如果開啟的檔案描述符超過了預設設定的限制,就可能會面臨訪問控制問題,受阻於開啟檔案的挑戰。許多生產環境因此而陷入停滯狀態。
幸運的是,在基於 Linux 的伺服器上,都有 ulimit
命令,通過它可以檢視、設定、獲取檔案開啟的狀態和配置詳情。此命令配備了許多選項,通過這些組合可以設定開啟檔案的數量。下面逐個命令用示例做了詳細說明。
檢視任何 Linux 系統中當前開啟檔案數的限制
要在 Linux 伺服器上得到開啟檔案數的限制,請執行以下命令,
[root@ubuntu ~]# cat /proc/sys/fs/file-max
146013
上面的數字表明使用者可以在每個使用者登入會話中開啟 ‘146013’ 個檔案。
[root@centos ~]# cat /proc/sys/fs/file-max
149219
[root@debian ~]# cat /proc/sys/fs/file-max
73906
這清楚地表明,各個 Linux 作業系統具有不同的開啟檔案數限制。這基於各自系統中執行的依賴關係和應用程式。
ulimit 命令
顧名思義,ulimit
(使用者限制)用於顯示和設定登入使用者的資源限制。當我們使用 -a
選項執行 ulimit
命令時,它將列印登入使用者的所有資源限制。現在讓我們在 Ubuntu/Debian 和 CentOS 系統上執行 ulimit -a
,
Ubuntu / Debian 系統
shashi@Ubuntu ~}$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 5731
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 5731
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
CentOS 系統
shashi@centos ~}$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 5901
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 5901
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
正如我們可以在這裡看到的,不同的作業系統具有不同的限制設定。所有這些限制都可以使用 ulimit
命令進行配置/更改。
要顯示單個資源限制,可以在 ulimit
命令中傳遞特定的引數,下面列出了一些引數:
ulimit -n
–> 顯示開啟檔案數限制ulimit -c
–> 顯示核心轉儲檔案大小umilit -u
–> 顯示登入使用者的最大使用者程式數限制ulimit -f
–> 顯示使用者可以擁有的最大檔案大小umilit -m
–> 顯示登入使用者的最大記憶體大小ulimit -v
–> 顯示最大記憶體大小限制
使用以下命令檢查登入使用者開啟檔案數量的硬限制和軟限制:
shashi@Ubuntu ~}$ ulimit -Hn
1048576
shashi@Ubuntu ~}$ ulimit -Sn
1024
如何修復達到最大檔案數限制的問題?
讓我們假設我們的 Linux 伺服器已經達到了開啟檔案的最大數量限制,並希望在系統範圍擴充套件該限制,例如,我們希望將 100000 設定為開啟檔案數量的限制。
root@ubuntu~]# sysctl -w fs.file-max=100000
fs.file-max = 100000
上述更改將在下次重啟之前有效,因此要使這些更改在重啟後仍存在,請編輯檔案 /etc/sysctl.conf
並新增相同的引數,
root@ubuntu~]# vi /etc/sysctl.conf
fs.file-max = 100000
儲存檔案並退出。
執行下面命令,使上述更改立即生效,而無需登出和重新啟動。
root@ubuntu~]# sysctl -p
現在驗證新的更改是否生效。
root@ubuntu~]# cat /proc/sys/fs/file-max
100000
使用以下命令找出當前正在使用的檔案描述符數量:
[root@ansible ~]# more /proc/sys/fs/file-nr
1216 0 100000
注意:命令 sysctl -p
用於在不重新啟動和登出的情況下提交更改。
通過 limit.conf 檔案設定使用者級資源限制
/etc/sysctl.conf
檔案用於設定系統範圍的資源限制,但如果要為 Oracle、MariaDB 和 Apache 等特定使用者設定資源限制,則可以通過 /etc/security/limits.conf
檔案去實現。
示例 limits.conf
如下所示,
root@ubuntu~]# cat /etc/security/limits.conf
假設我們要為 linuxtechi 使用者設定開啟檔案數量的硬限制和軟限制,而對於 oracle 使用者設定開啟程式數量的硬限制和軟限制,編輯檔案 /etc/security/limits.conf
並新增以下行:
# hard limit for max opened files for linuxtechi user
linuxtechi hard nofile 4096
# soft limit for max opened files for linuxtechi user
linuxtechi soft nofile 1024
# hard limit for max number of process for oracle user
oracle hard nproc 8096
# soft limit for max number of process for oracle user
oracle soft nproc 4096
儲存檔案並退出。
注意: 如果你想對一個組而不是使用者進行資源限制,那麼也可以通過 limits.conf
檔案,輸入 @<組名>
代替使用者名稱,其餘項都是相同的,示例如下,
# hard limit for max opened files for sysadmin group
@sysadmin hard nofile 4096
# soft limit for max opened files for sysadmin group
@sysadmin soft nofile 1024
驗證新的更改是否生效:
~]# su - linuxtechi
~]$ ulimit -n -H
4096
~]$ ulimit -n -S
1024
~]# su - oracle
~]$ ulimit -H -u
8096
~]$ ulimit -S -u
4096
注:其他主要使用的命令是 lsof,可用於找出“當前開啟了多少個檔案”,這命令對管理員非常有幫助。
結尾
正如在介紹部分提到的,ulimit
命令非常強大,可以幫助使用者配置並確保應用程式安裝更加流暢而沒有任何瓶頸。此命令有助於修復基於 Linux 的伺服器中的(開啟)大量檔案的限制。
via: https://www.linuxtechi.com/set-ulimit-file-descriptors-limit-linux-servers/
作者:Shashidhar Soppin 選題:lujun9972 譯者:zgj1024 校對:wxy
訂閱“Linux 中國”官方小程式來檢視
相關文章
- Linux檔案描述符Linux
- 如何在Linux上使用Osquery設定檔案完整性監控(FIM)Linux
- 如何在 Linux 上建立和使用交換檔案Linux
- 如何在 Debian Linux 上設定和配置網橋Linux
- linux中的檔案描述符Linux
- 檔案描述符和檔案系統
- 檔案包含之包含了Linux檔案描述符Linux
- 如何在 Linux 上設定古老又簡單的 TFTP 伺服器LinuxFTP伺服器
- Linux中修改開啟檔案的數量限制Linux
- Linux伺服器上傳檔案傳送檔案Linux伺服器
- Linux--檔案描述符、檔案指標、索引節點Linux指標索引
- 如何在 Arch Linux 上安裝和設定 KDE 桌面環境?Linux
- Lumen 檔案上傳設定
- 檔案描述符
- 如何在 Linux 上重新命名一組檔案Linux
- apache上傳檔案大小限制Apache
- PbootCMS上傳檔案大小限制boot
- php檔案上傳大小限制PHP
- 如何在 Linux 中分割和重組檔案!Linux
- 伺服器上傳檔案至linux伺服器伺服器Linux
- 如何在MacOS中設定共享檔案協議?Mac協議
- Linux ulimit使用LinuxMIT
- 如何在 Linux 上用密碼加密和解密檔案Linux密碼加密解密
- JavaScript限制上傳檔案的大小JavaScript
- 如何在本地修改Hosts檔案設定域名訪問?
- vue ElementUI upload上傳檔案時對檔案格式、大小和寬高的限制VueUI
- 如何在 Linux 上識別同樣內容的檔案Linux
- windwos檔案控制代碼數限制
- Nginx 調整檔案上傳大小限制Nginx
- 如何在 Linux 中顯示和設定主機名?Linux
- 如何在linux伺服器上使用hanlpLinux伺服器HanLP
- 在Linux中修改開啟檔案數量限制的3種方法Linux
- Linux上傳檔案Linux
- 如何在Android上播放swf檔案Android
- win10限制上傳速度在哪裡設定 win10電腦限制上傳速度怎麼設定Win10
- MySQL的配置檔案的引數設定MySql
- 如何在 Linux 上安裝、配置 NTP 伺服器和客戶端?Linux伺服器客戶端
- linux一切皆檔案之Unix domain socket描述符(二)LinuxAI