一、/etc/security/limits.conf詳解
/etc/security/limits.conf文件實(shí)際是 Linux PAM(插入式認(rèn)證模塊,Pluggable Authentication Modules)中pam_limits.so的配置文件,而且只針對(duì)于單個(gè)會(huì)話。該設(shè)置不會(huì)影響系統(tǒng)服務(wù)的資源限制。還要注意/etc/security/limits.d/的這個(gè)目錄,
/etc/security/limits.conf配置解析
# /etc/security/limits.conf # #This file sets the resource limits for the users logged in via PAM. 該文件為通過(guò)PAM登錄的用戶設(shè)置資源限制。 #It does not affect resource limits of the system services. #它不影響系統(tǒng)服務(wù)的資源限制。 #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. 請(qǐng)注意/etc/security/limits.d下按照字母順序排列的配置文件會(huì)覆蓋 /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會(huì)被子目錄中相同的通配符配置所覆蓋,但是某一用戶的特定配置 只能被字母路中用戶的配置所覆蓋。其實(shí)就是某一用戶A如果在/etc/security/limits.conf有配置,當(dāng) /etc/security/limits.d子目錄下配置文件也有用戶A的配置時(shí),那么A中某些配置會(huì)被覆蓋。最終取的值是 /etc/security/limits.d 下的配置文件的配置。 # #Each line describes a limit for a user in the form: #每一行描述一個(gè)用戶配置 ##Where: # can be: # - a user name 一個(gè)用戶名 # - a group name, with @group syntax 用戶組格式為@GROUP_NAME # - the wildcard *, for default entry 默認(rèn)配置為*,代表所有用戶 # - the wildcard %, can be also used with %group syntax, # for maxlogin limit # # can have the two values: # - "soft" for enforcing the soft limits # - "hard" for enforcing hard limits 有soft,hard和-,soft指的是當(dāng)前系統(tǒng)生效的設(shè)置值,軟限制也可以理解為警告值。 hard表名系統(tǒng)中所能設(shè)定的最大值。soft的限制不能比hard限制高,用-表名同時(shí)設(shè)置了soft和hard的值。 # - can be one of the following:
- 可以使以下選項(xiàng)中的一個(gè) # - core - limits the core file size (KB) 限制內(nèi)核文件的大小。 # - data - max data size (KB) 最大數(shù)據(jù)大小 # - fsize - maximum filesize (KB) 最大文件大小 # - memlock - max locked-in-memory address space (KB) 最大鎖定內(nèi)存地址空間 # - nofile - max number of open file descriptors 最大打開(kāi)的文件數(shù)(以文件描敘符,file descripter計(jì)數(shù)) # - rss - max resident set size (KB) 最大持久設(shè)置大小 # - stack - max stack size (KB) 最大棧大小 # - cpu - max CPU time (MIN) 最多CPU占用時(shí)間,單位為MIN分鐘 # - nproc - max number of processes 進(jìn)程的最大數(shù)目 # - as - address space limit (KB) 地址空間限制 # - maxlogins - max number of logins for this user 此用戶允許登錄的最大數(shù)目 # - maxsyslogins - max number of logins on the system 系統(tǒng)最大同時(shí)在線用戶數(shù) # - priority - the priority to run user process with 運(yùn)行用戶進(jìn)程的優(yōu)先級(jí) # - locks - max number of file locks the user can hold 用戶可以持有的文件鎖的最大數(shù)量 # - 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優(yōu)先級(jí)允許提升到值 # - rtprio - max realtime pr iority # #
# #* 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/目錄
該目錄下默認(rèn)有*-nproc.conf文件,該文件是用于限制用戶的線程限制。我們也可以在該目錄創(chuàng)建配置文件在/etc/security/limits.d/下,以 .conf 結(jié)尾。
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 # 所有的用戶默認(rèn)可以打開(kāi)最大的進(jìn)程數(shù)為 4096 root soft nproc unlimited # root 用戶默認(rèn)可以打開(kāi)最大的進(jìn)程數(shù) 無(wú)限制的。
CentOS 6
在CentOS 6版本中為/etc/security/limits.d/90-nproc.conf
二、 ulimit 如何配置
配置注意事項(xiàng)
注意不能設(shè)置nofile不能設(shè)置unlimited,noproc可以.
當(dāng)我們?cè)O(shè)置了nofile不能設(shè)置unlimited后,我們進(jìn)行 ssh 登錄,是登錄不了的,并且報(bào)錯(cuò)下面的內(nèi)容。
Dec 1 1457 localhost sshd[1543]: pam_limits(sshd Could not set limit for 'nofile': Operation not permitted
當(dāng)我們?cè)O(shè)置的nofile的值可以設(shè)置的最大值為 1048576(2**20),設(shè)置的值大于該數(shù),就會(huì)進(jìn)行登錄不了。也會(huì)顯示上面的登錄錯(cuò)誤。(親測(cè))
基礎(chǔ)配置
我們不將所有的配置配置在/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設(shè)置為
* - nproc 65535 root soft nproc unlimited root hard nproc unlimited
注意覆蓋點(diǎn)的問(wèn)題。
示例一:
當(dāng)/etc/security/limits.conf配置了:
root soft nofile 65538 root hard nofile 65538 * soft nofile 65539 * hard nofile 65539
這個(gè)root 用戶的 默認(rèn)取值是 65538 ,* 統(tǒng)配符雖然在 root 配置后面,但是 root 的配置只能被 root 進(jìn)行覆蓋。
我們看下這個(gè)配置,當(dāng)這樣配置的時(shí)候
root soft nofile 65538 root hard nofile 65538 * soft nofile 65539 * hard nofile 65539 root soft nofile 65539
這個(gè)的 root 用戶的取值還是 65538 ,因?yàn)殡m然root soft nofile 65539會(huì)覆蓋我們之前的配置,但是這個(gè)配置是不生效的。因?yàn)閞oot soft nofile 65539配置的值大于root hard nofile 65538,soft配置的值不能大于hard.
示例二:
當(dāng)我們?cè)?etc/security/limits.conf配置了:
root soft nofile 65538 root hard nofile 65538 * soft nofile 65539 * hard nofile 65539
然后我們?cè)?etc/security/limits.d/20-nofile.conf配置了:
root soft nofile 65536 root hard nofile 65536 * soft nofile 65540 * hard nofile 65540
最后的取值是會(huì)取/etc/security/limits.d/20-nofile.conf里面的值。
配置,只能被特定覆蓋。
/etc/security/limits.d/下文件的相同配置可以覆蓋/etc/security/limits.conf
soft和hard需要都進(jìn)行設(shè)置,才能生效。
nofile不能設(shè)置unlimited
nofile可以設(shè)置的最大值為 1048576(2**20),設(shè)置的值大于該數(shù),就會(huì)進(jìn)行登錄不了。
soft 設(shè)置的值 一定要小于或等于 hard 的值。
具體詳細(xì)配置根據(jù)應(yīng)用情況進(jìn)行配置。
三、ulimit 配置后生效
臨時(shí)配置
設(shè)置可以打開(kāi)文件的最大數(shù)為 65536
ulimit -SHn 65536
重啟后失效。
永久配置
配置到配置文件/etc/security/limits.conf或者/etc/security/limits.d/中。
然后退出當(dāng)前會(huì)話,重新登錄。即可生效,重啟配置也會(huì)保留。
三、ulimit 配置后生效
臨時(shí)配置
設(shè)置可以打開(kāi)文件的最大數(shù)為 65536
ulimit -SHn 65536
重啟后失效。
永久配置
配置到配置文件/etc/security/limits.conf或者/etc/security/limits.d/中。
然后退出當(dāng)前會(huì)話,重新登錄。即可生效,重啟配置也會(huì)保留。
配置不生效的問(wèn)題
2020年3月6日補(bǔ)充
問(wèn)題
按照上面的配置好了之后,我們進(jìn)行設(shè)置登錄到服務(wù)器,我發(fā)現(xiàn)是配置沒(méi)有生效的,但是我使用 su - root 之后,發(fā)現(xiàn)配置是生效的。很怪異。
設(shè)備環(huán)境:Centos6.
問(wèn)題原因
主要是 Centos6 的原因,我們排查到 sshd 服務(wù)的 PAM 模塊是沒(méi)有開(kāi)啟的,而/etc/security/limits.conf文件實(shí)際是 Linux PAM(插入式認(rèn)證模塊,Pluggable Authentication Modules)中pam_limits.so的配置文件,我們沒(méi)有開(kāi)啟 PAM 模塊,最終也就沒(méi)有讀取到/etc/security/limits.conf的內(nèi)容。而 su 進(jìn)行切換的時(shí)候使用的是 終端tty登陸(默認(rèn)使用PAM模塊),
解決辦法
在/etc/ssh/sshd_config將UsePAM no更改為UsePAM yes, 然后重啟 sshd 服務(wù)。
四、ulimit 常用命令
-Suse the `soft' resource limit # 設(shè)置軟限制 -Huse the `hard' resource limit # 設(shè)置硬限制 -aall current limits are reported# 顯示所有的配置。 -bthe socket buffer size # 設(shè)置socket buffer 的最大值。 -cthe maximum size of core files created # 設(shè)置core文件的最大值. -dthe maximum size of a process's data segment # 設(shè)置線程數(shù)據(jù)段的最大值 -ethe maximum scheduling priority (`nice') # 設(shè)置最大調(diào)度優(yōu)先級(jí) -fthe maximum size of files written by the shell and its children # 創(chuàng)建文件的最大值。 -ithe maximum number of pending signals # 設(shè)置最大的等待信號(hào) -lthe maximum size a process may lock into memory #設(shè)置在內(nèi)存中鎖定進(jìn)程的最大值 -mthe maximum resident set size -nthe maximum number of open file descriptors # 設(shè)置最大可以的打開(kāi)文件描述符。 -pthe pipe buffer size -qthe maximum number of bytes in POSIX message queues -rthe maximum real-time scheduling priority -sthe maximum stack size -tthe maximum amount of cpu time in seconds -uthe maximum number of user processes # 設(shè)置用戶可以創(chuàng)建的最大進(jìn)程數(shù)。 -vthe size of virtual memory # 設(shè)置虛擬內(nèi)存的最大值 -xthe maximum number of file locks
查看配置
查看所有的配置
ulimit -a
查看配置的最大打開(kāi)文件數(shù)
ulimit -n
更改配置
ulimit -SHn 65536
五、systemd 相關(guān)的limit
最近一次故障中才發(fā)現(xiàn)的問(wèn)題,就是我們通過(guò)systemd 管理的服務(wù),文件最大打開(kāi)數(shù)是1024(軟限制),硬限制是4096. 但是我們的/etc/security/limits.conf和/etc/security/limits.d/20-nofile.conf設(shè)置的值都不是1024。
引申出來(lái),我們的systemd 管理的服務(wù)有單獨(dú)的limit 限制。
systemd 管理的服務(wù)limit 配置取決于以下三個(gè)位置:
系統(tǒng)服務(wù)的默認(rèn)全局配置/etc/systemd/system.conf
用戶服務(wù)默認(rèn)全局配置/etc/systemd/user.conf
單個(gè)系統(tǒng)服務(wù)的配置/usr/lib/systemd/system/*.conf
問(wèn)題一 如何查看現(xiàn)有系統(tǒng)服務(wù)的Limit
systemctl show sshd
[root@djx128 ~]# systemctl show sshd |grep '^Limit' LimitCPU=18446744073709551615 LimitFSIZE=18446744073709551615 LimitDATA=18446744073709551615 LimitSTACK=18446744073709551615 LimitCORE=18446744073709551615 LimitRSS=18446744073709551615 LimitNOFILE=4096 LimitAS=18446744073709551615 LimitNPROC=11222 LimitMEMLOCK=65536 LimitLOCKS=18446744073709551615 LimitSIGPENDING=11222 LimitMSGQUEUE=819200 LimitNICE=0 LimitRTPRIO=0 LimitRTTIME=18446744073709551615
如果是已經(jīng)運(yùn)行的服務(wù),可以通過(guò)基于進(jìn)程進(jìn)行查看,cat /proc/pid/limits
[root@djx128 ~]# cat /proc/943/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 11222 11222 processes Max open files 1024 4096 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 11222 11222 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
問(wèn)題二 一個(gè)服務(wù),如何調(diào)整 Limit 限制
改全局配置/etc/systemd/system.conf
改全局配置如何生效?這個(gè)需要注意。
方法一:直接重啟主機(jī)
方法二:執(zhí)行systemctl daemon-reexec, 然后重啟服務(wù)即可。
daemon-reexec 和 daemon-reload 相比。https://serverfault.com/questions/805745/reboot-or-systemctl-daemon-reload-for-changes-to-etc-systemd-system-conf/805751
方法三:使用prlimit調(diào)整。
prlimit --pid 13134 --nofile=1024:4096
更改單服務(wù)配置(推薦)
增加LimitNOFILE配置
vim /usr/lib/systemd/system/mariadb.service [Service] LimitNOFILE=32768
重新加載配置
systemctl daemon-reload
重啟服務(wù)
systemctl restart mariadb
六、 擴(kuò)展
如何查看當(dāng)前運(yùn)行進(jìn)程的limit 限制
cat /proc/進(jìn)程號(hào)/limits
如何更改當(dāng)前的進(jìn)程的最大文件數(shù)限制
getrlimit, setrlimit, prlimit - get/set resource limits
https://man7.org/linux/man-pages/man1/prlimit.1.html
prlimit --pid 13134 --nofile=1024:4096
審核編輯:黃飛
-
Linux
+關(guān)注
關(guān)注
87文章
11325瀏覽量
209953 -
進(jìn)程
+關(guān)注
關(guān)注
0文章
203瀏覽量
13969
原文標(biāo)題:Linux中Limit相關(guān)內(nèi)容設(shè)置大全(值得收藏)
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論