/etc/security/limits.conf 詳解與配置
一、 /etc/security/limits.conf 詳解
/etc/security/limits.conf
檔案實際是 Linux PAM(插入式認證模組,Pluggable Authentication Modules)中 pam_limits.so
的配置檔案,而且只針對於單個會話。 該設定不會影響系統服務的資源限制。還要注意 /etc/security/limits.d/
的這個目錄,
/etc/security/limits.conf 配置解析
# /etc/security/limits.conf # #This file sets the resource limits for the users logged in via PAM. 該檔案為通過PAM登入的使用者設定資源限制。 #It does not affect resource limits of the system services. #它不影響系統服務的資源限制。 #Also note that configuration files in /etc/security/limits.d directory, #which are read in alphabetical order, override the settings in this #file in case the domain is the same or more specific. 請注意/etc/security/limits.d下按照字母順序排列的配置檔案會覆蓋 /etc/security/limits.conf中的 domain相同的的配置 #That means for example that setting a limit for wildcard domain here #can be overriden with a wildcard setting in a config file in the #subdirectory, but a user specific setting here can be overriden only #with a user specific setting in the subdirectory. 這意味著,例如使用萬用字元的domain會被子目錄中相同的萬用字元配置所覆蓋,但是某一使用者的特定配置 只能被字母路中使用者的配置所覆蓋。其實就是某一使用者A如果在/etc/security/limits.conf有配置,當 /etc/security/limits.d子目錄下配置檔案也有使用者A的配置時,那麼A中某些配置會被覆蓋。最終取的值是 /etc/security/limits.d 下的配置檔案的配置。 # #Each line describes a limit for a user in the form: #每一行描述一個使用者配置 #<domain> <type> <item> <value> #Where: #<domain> can be: # - a user name 一個使用者名稱 # - a group name, with @group syntax 使用者組格式為@GROUP_NAME # - the wildcard *, for default entry 預設配置為*,代表所有使用者 # - the wildcard %, can be also used with %group syntax, # for maxlogin limit # #<type> can have the two values: # - "soft" for enforcing the soft limits # - "hard" for enforcing hard limits 有soft,hard和-,soft指的是當前系統生效的設定值,軟限制也可以理解為警告值。 hard表名系統中所能設定的最大值。soft的限制不能比hard限制高,用-表名同時設定了soft和hard的值。 #<item> can be one of the following: <item>可以使以下選項中的一個 # - 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 file descriptors 最大開啟的檔案數(以檔案描敘符,file descripter計數) # - rss - max resident set size (KB) 最大持久設定大小 # - stack - max stack size (KB) 最大棧大小 # - cpu - max CPU time (MIN) 最多CPU佔用時間,單位為MIN分鐘 # - nproc - max number of processes 程序的最大數目 # - as - address space limit (KB) 地址空間限制 # - 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 values: [-20, 19] max nice優先順序允許提升到值 # - rtprio - max realtime pr iority # #<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 #@st
/etc/security/limits.d/目錄
/etc/security/limits.d/
目錄
該目錄下預設有*-nproc.conf
檔案,該檔案是用於限制使用者的執行緒限制。我們也可以在該目錄建立配置檔案在/etc/security/limits.d/
下,以 .conf 結尾。centos 7
在CentOS 7版本中為
/etc/security/limits.d/20-nproc.conf
,# Default limit for number of user's processes to prevent # accidental fork bombs. # See rhbz #432903 for reasoning. * soft nproc 4096 # 所有的使用者預設可以開啟最大的程序數為 4096 root soft nproc unlimited # root 使用者預設可以開啟最大的程序數 無限制的。
CentOS 6
在CentOS 6版本中為
/etc/security/limits.d/90-nproc.conf
二、 ulimit 如何配置
配置注意事項
注意不能設定 nofile
不能設定 unlimited
,noproc
可以.
當我們設定了 nofile
不能設定 unlimited
後,我們進行 ssh 登入,是登入不了的,並且報錯下面的內容。
Dec 1 14:57:57 localhost sshd[1543]: pam_limits(sshd:session): Could not set limit for 'nofile': Operation not permitted
當我們設定的 nofile
的值可以設定的最大值為 1048576(2**20),設定的值大於該數,就會進行登入不了。也會顯示上面的登入錯誤。(親測)
基礎配置
我們不將所有的配置配置在/etc/security/limits.conf
而是將配置放在 /etc/security/limits.d/
下。
比如我們將 nofile的配置放在 /etc/security/limits.d/20-nofile.conf
,nproc 的配置放在 /etc/security/limits.d/20-nproc.conf
.
一般我們需要配置的 /etc/security/limits.d/20-nofile.conf
為。
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
/etc/security/limits.d/20-nproc.conf
設定為
* - nproc 65535
root soft nproc unlimited
root hard nproc unlimited
注意覆蓋點的問題。
示例一:
當 /etc/security/limits.conf
配置了:
root soft nofile 65538
root hard nofile 65538
* soft nofile 65539
* hard nofile 65539
這個root 使用者的 預設取值是 65538 ,* 統配符雖然在 root 配置後面,但是 root 的配置只能被 root 進行覆蓋。
我們看下這個配置,當這樣配置的時候
root soft nofile 65538
root hard nofile 65538
* soft nofile 65539
* hard nofile 65539
root soft nofile 65539
這個的 root 使用者的取值還是 65538 ,因為雖然 root soft nofile 65539
會覆蓋我們之前的配置,但是這個配置是不生效的。因為 root soft nofile 65539
配置的值大於root hard nofile 65538
, soft
配置的值不能大於 hard
.
示例二:
當我們在 /etc/security/limits.conf
配置了:
root soft nofile 65538
root hard nofile 65538
* soft nofile 65539
* hard nofile 65539
然後我們在 /etc/security/limits.d/20-nofile.conf
配置了:
root soft nofile 65536
root hard nofile 65536
* soft nofile 65540
* hard nofile 65540
最後的取值是會取 /etc/security/limits.d/20-nofile.conf
裡面的值。
- 配置,只能被特定覆蓋。
/etc/security/limits.d/
下檔案的相同配置可以覆蓋/etc/security/limits.conf
soft
和hard
需要都進行設定,才能生效。nofile
不能設定unlimited
nofile
可以設定的最大值為 1048576(2**20),設定的值大於該數,就會進行登入不了。- soft 設定的值 一定要小於或等於 hard 的值。
具體詳細配置根據應用情況進行配置。
三、ulimit 配置後生效
臨時配置
設定可以開啟檔案的最大數為 65536
ulimit -SHn 65536
重啟後失效。
永久配置
配置到配置檔案/etc/security/limits.conf
或者 /etc/security/limits.d/
中。
然後退出當前會話,重新登入。 即可生效,重啟配置也會保留。
配置不生效的問題
後續補充。
四、ulimit 常用命令
-S use the `soft' resource limit # 設定軟限制
-H use the `hard' resource limit # 設定硬限制
-a all current limits are reported# 顯示所有的配置。
-b the socket buffer size # 設定socket buffer 的最大值。
-c the maximum size of core files created # 設定core檔案的最大值.
-d the maximum size of a process's data segment # 設定執行緒資料段的最大值
-e the maximum scheduling priority (`nice') # 設定最大排程優先順序
-f the maximum size of files written by the shell and its children # 建立檔案的最大值。
-i the maximum number of pending signals # 設定最大的等待訊號
-l the maximum size a process may lock into memory #設定在記憶體中鎖定程序的最大值
-m the maximum resident set size
-n the maximum number of open file descriptors # 設定最大可以的開啟檔案描述符。
-p the pipe buffer size
-q the maximum number of bytes in POSIX message queues
-r the maximum real-time scheduling priority
-s the maximum stack size
-t the maximum amount of cpu time in seconds
-u the maximum number of user processes # 設定使用者可以建立的最大程序數。
-v the size of virtual memory # 設定虛擬記憶體的最大值
-x the maximum number of file locks
檢視配置
檢視所有的配置
ulimit -a
檢視配置的最大開啟檔案數
ulimit -n
更改配置
ulimit -SHn 65536
文章參考:
/etc/security/limits.conf配置檔案詳解
linux ulimit的若干坑 - ulimit真不是亂設