系統的可用資源是有限的,如果不限制使用者和進程對系統資源的使用,則很容易陷入資源耗盡的地步,而使用 ulimit 命令可以控制進程對可用資源的存取(ulimit 是一個 Shell 內建命令)。
預設情況下 Linux 系統的各個資源都做了軟硬限制,其中硬限制的作用是控制軟限制(換言之,軟限制不能高於硬限制)。使用
ulimit -a
可以檢視當前系統的軟限制,使用命令
ulimit -a –H
可檢視系統的硬限制。
下面是該命令的執行結果,筆者對每行輸出都做了註解。
[[email protected] ~]# ulimit -a
#core檔案大小,單位是block,預設為0
core file size (blocks, -c) 0
#資料段大小,單位是kbyte,預設不做限制
data seg size (kbytes, -d) unlimited
#排程優先順序,預設為0
scheduling priority (-e) 0
#建立檔案的大小,單位是block,預設不做限制
file size (blocks, -f) unlimited
#掛起的信號數量,預設是8192
pending signals (-i) 8192
#最大鎖定記憶體的值,單位是kbyte,預設是32
max locked memory (kbytes, -l) 32
#最大可用的常駐記憶體值,單位是kbyte,預設不做限制
max memory size (kbytes, -m) unlimited
#最大開啟的檔案數,預設是1024
open files (-n) 1024
#管道最大緩衝區的值
pipe size (512 bytes, -p) 8
#訊息佇列的最大值,單位是byte
POSIX message queues (bytes, -q) 819200
#程式的實時性優先順序,預設為0
real-time priority (-r) 0
#棧大小,單位是kbyte
stack size (kbytes, -s) 10240
#最大cpu占用時間,預設不做限制
cpu time (seconds, -t) unlimited
#使用者最大進程數,預設是8192
max user processes (-u) 8192
#最大虛擬記憶體,單位是kbyte,預設不做限制
virtual memory (kbytes, -v) unlimited
#檔案鎖,預設不做限制
file locks (-x) unlimited
每一行中都包含了相應的改變該項設定的引數,以最大可以開啟的檔案數為例(open files 預設是 1024),想要增大至 4096 則按照如下命令設定(可參照此方法調整其他引數)。
#設定最大開啟的檔案數
#該命令會同時設定硬限制和軟限制
[[email protected] ~]# ulimit -n 4096
#使用-S引數單獨設定軟限制
#[[email protected] ~]# ulimit -S -n 4096
#使用-H引數單獨設定硬限制
#[[email protected] ~]# ulimit -H -n 4096
使用 ulimit 直接調整引數,只會在當前執行時生效,一旦系統重新啟動,所有調整過的引數就會變回系統預設值。所以建議將所有的改動放在 ulimit 的系統組態檔中。相關設定方法請參考筆者對相關組態檔的注釋。
[[email protected] ~]# cat /etc/security/limits.conf
# /etc/security/limits.conf
#該檔案是ulimit的組態檔,任何對系統的ulimit的修改都應該寫入該檔案
#請將所有的設定寫到該檔案的最後
#Each line describes a limit for a user in the form:
#設定應該寫成下面這行的格式,即每個設定占用1行,每行4列
#每列分別是<domain> <type> <item> <value>
#<domain> <type> <item> <value>
#
#其中:
#<domain>可以取的值如下:
# - 一個使用者名稱
# - 一個組名,組名前面用@符號
# - 萬用字元*
# - 萬用字元%
#Where:
#<domain> can be:
# - an user name
# - a group name, with @group syntax
# - the wildcard *, for default entry
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
#
#<type>只有以下兩個可用值:
# - soft用於設定軟限制
# - hard用於設定硬限制
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item>的值可以是以下任意一種:
# - core - core檔案大小的限制 (KB)
# - data - 最巨量資料段限制 (KB)
# - fsize - 最大檔案大小 (KB)
# - memlock - 最大鎖定的記憶體大小 (KB)
# - nofile - 最大開啟檔案數
# - rss - 最大常駐記憶體值 (KB)
# - stack - 最大棧空間大小 (KB)
# - cpu - 最大CPU使用時間 (MIN)
# - nproc - 最大進程數
# - as - 虛擬地址空間
# - maxlogins - 某使用者的最大登入數
# - maxsyslogins - 系統使用者最大登入數
# - priority - 使用者進程的執行優先順序
# - locks – 使用者最大可以鎖定檔案的數量
# - sigpending - 最大掛起的號誌數
# - msgqueue - POSIX信號佇列使用的最大記憶體值 (bytes)
# - nice - 最大nice值
# - rtprio - 最大實時優先順序
#
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open files
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit
# - maxlogins - max number of logins for this user
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to
# - rtprio - max realtime priority
#
#<domain> <type> <item> <value>
#
#以下是使用樣例,請參照設定
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4