/etc/security/limits.conf 是一個(gè)用于配置用戶或用戶組資源限制的配置文件。這個(gè)文件通常用于設(shè)置系統(tǒng)資源的軟限制和硬限制,以及一些特殊權(quán)限。
一. limits.conf常見配置項(xiàng)詳解
下面是一些 /etc/security/limits.conf 文件中可能包含的常見配置項(xiàng):
描述
- 第一列表示用戶和組(@開頭),這里的 * 代表所有用戶。第二列表示軟限制還是硬限制,第三列表示限制的資源類型,第四列表示限制的最大值 hard和soft的區(qū)別。
- soft是一個(gè)警告值,而hard則是一個(gè)真正意義的閥值,超過就會(huì)報(bào)錯(cuò),一般情況下都是設(shè)為同一個(gè)值。
- core是內(nèi)核文件,nofile是文件描述符,noproc是進(jìn)程,一般情況下只限制文件描述符數(shù)和進(jìn)程數(shù)就夠了
注意
修改了 /etc/security/limits.conf 文件后,需要注銷并重新登錄用戶,或者重新啟動(dòng)相關(guān)的服務(wù)才能使配置生效。
?
二. 文件描述符(file descriptor)簡(jiǎn)述
文件描述符是一個(gè)索引
Linux系統(tǒng)中一切皆可以看成是文件,文件又可分為:普通文件、目錄文件、鏈接文件和設(shè)備文件。在操作文件的時(shí)候,如果每操作一次就找一次名字,這就會(huì)耗費(fèi)大量的時(shí)間和效率。所以Linux中規(guī)定每一個(gè)文件對(duì)應(yīng)一個(gè)索引,與文件交互時(shí)直接找索引即可,這里的索引就是文件描述符。
文件描述符(file descriptor)是內(nèi)核為了高效管理這些已經(jīng)被打開的文件所創(chuàng)建的索引,其是一個(gè)非負(fù)整數(shù)(通常是小整數(shù)),用于指代被打開的文件,所有執(zhí)行I/O操作的系統(tǒng)調(diào)用都通過文件描述符來實(shí)現(xiàn)。
?
文件描述符表格
Linux內(nèi)核對(duì)所有打開的文件有一個(gè)文件描述符表格,里面存儲(chǔ)了每個(gè)文件描述符作為索引與一個(gè)打開文件相對(duì)應(yīng)的關(guān)系,簡(jiǎn)單理解如上圖這樣一個(gè)數(shù)組,文件描述符(索引)就是文件描述符表這個(gè)數(shù)組的下標(biāo),數(shù)組的內(nèi)容就是指向一個(gè)個(gè)打開的文件的指針。
?
?
三. 為什么限制
為什么要限制打開的文件描述符?
- 資源問題:每個(gè)打開的文件都需要消耗內(nèi)存來管理,而內(nèi)存是有限的。
- 安全問題:如果不限制的話,有不懷好心的人啟動(dòng)一個(gè)進(jìn)程來無限的創(chuàng)建和打開新的文件,會(huì)讓服務(wù)器崩潰。
?
為什么限制進(jìn)程數(shù)?
資源管理: 進(jìn)程數(shù)限制有助于控制系統(tǒng)資源的分配和使用。每個(gè)進(jìn)程都需要分配一些系統(tǒng)資源,如內(nèi)存、CPU 時(shí)間、文件描述符等。如果允許無限制地創(chuàng)建大量進(jìn)程,可能會(huì)消耗掉系統(tǒng)的資源,導(dǎo)致系統(tǒng)變得不穩(wěn)定或崩潰。
性能和穩(wěn)定性:過多的進(jìn)程可能會(huì)導(dǎo)致系統(tǒng)性能下降。當(dāng)系統(tǒng)負(fù)載增加時(shí),會(huì)增加調(diào)度和管理進(jìn)程的開銷,可能導(dǎo)致響應(yīng)時(shí)間變長(zhǎng),甚至影響到系統(tǒng)的穩(wěn)定性。
安全性: 進(jìn)程數(shù)限制也有助于防止惡意軟件或惡意用戶通過大量的進(jìn)程耗盡系統(tǒng)資源,從而對(duì)系統(tǒng)進(jìn)行拒絕服務(wù)攻擊(Denial of Service,DoS)或拖垮系統(tǒng)的運(yùn)行。
避免資源競(jìng)爭(zhēng): 限制進(jìn)程數(shù)也有助于避免資源競(jìng)爭(zhēng)。在某些情況下,過多的進(jìn)程可能爭(zhēng)奪相同的資源,導(dǎo)致競(jìng)爭(zhēng)、阻塞或性能下降。
?
四. 相關(guān)操作
1. 展示當(dāng)前資源限制
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) 63456
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 327680
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) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
關(guān)注幾個(gè)值
max locked memory (kbytes, -l): 最大鎖定內(nèi)存大小限制,表示進(jìn)程可以鎖定在內(nèi)存中的最大數(shù)據(jù)量。這里設(shè)置為 64 KB。
open files (-n): 打開文件的數(shù)量限制,表示進(jìn)程可以同時(shí)打開的文件數(shù)量。這里設(shè)置為 327680。
pipe size (512 bytes, -p): 管道大小限制,表示管道緩沖區(qū)的最大大小。這里設(shè)置為 8,表示管道緩沖區(qū)的大小為 8 * 512 字節(jié)。
stack size (kbytes, -s): 棧大小限制,表示進(jìn)程棧的最大大小。這里設(shè)置為 8192 KB。
max user processes (-u): 最大用戶進(jìn)程數(shù)限制,表示一個(gè)用戶可以創(chuàng)建的最大進(jìn)程數(shù)量。這里設(shè)置為 4096。
?
2. 查看系統(tǒng)當(dāng)前打開的文件描述符數(shù)量
sudo cat /proc/sys/fs/file-nr
1184 0 1610170
- 第一個(gè)數(shù):表示當(dāng)前系統(tǒng)分配后已使用的文件描述符數(shù),
- 第二個(gè)數(shù):表示分配后未使用的(內(nèi)核2.6版本中這個(gè)值總是為0,這并不是一個(gè)錯(cuò)誤,它意味著已經(jīng)分配的文件描述符總會(huì)被使用),
- 第三個(gè)數(shù):等于最大值file-max。
?文章來源:http://www.zghlxwxcb.cn/news/detail-767811.html
3. 查看某個(gè)進(jìn)程打開的文件描述符數(shù)量
$ lsof -p 20262 |wc -l
5
?文章來源地址http://www.zghlxwxcb.cn/news/detail-767811.html
4. 各進(jìn)程占用的文件描述符
lsof -n |awk '{print $10}'|sort |uniq -c |sort -nr|head -10
9838
488 IDEA
279 Chrome.app/Contents/Frameworks/Google
150 Book
96 id
58 Layouts/AppleKeyboardLayouts.bundle/Contents/Resources/AppleKeyboardLayouts-L.dat
50 Support/Google/Chrome/Subresource
41 (ESTABLISHED)
36 Support/XMind/Electron
33 Support/Google/Chrome/optimization_guide_model_store/25/63922A0C010C80A5/6B406658B3AA7A20/visual_model_desktop.tflite
到了這里,關(guān)于【linux】/etc/security/limits.conf配置文件詳解、為什么限制、常見限制查看操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!