Linux系统资源限制
Linux系統(tǒng)資源限制
1. 最大文件數(shù)
查看進(jìn)程允許打開(kāi)的最大文件句柄數(shù):ulimit -n
查看進(jìn)程所占的文件描述符: lsof -p xxx | wc -l
設(shè)置進(jìn)程能打開(kāi)的最大文件句柄數(shù):ulimit -n xxx
2. ulimit -n vs. file-max ?
簡(jiǎn)單的說(shuō), ulimit -n控制進(jìn)程級(jí)別能夠打開(kāi)的文件句柄的數(shù)量, 而max-file表示系統(tǒng)級(jí)別的能夠打開(kāi)的文件句柄的數(shù)量。
ulimit -n的設(shè)置在重啟機(jī)器后會(huì)丟失,因此需要修改limits.conf的限制,limits.conf中有兩個(gè)值soft和hard,soft代表只警告,hard代表真正的限制
Cat /etc/security/limits.conf代碼?
*?????????????? soft??? nofile????????? 150000?
*?????????????? hard??? nofile????????? 150000?
這里我們把soft和hard設(shè)置成一樣的。
“cat /proc/sys/fs/file-max”,或“sysctl -a | grep fs.file-max”查看系統(tǒng)能打開(kāi)的最大文件數(shù)。查看和設(shè)置例如:
Shell代碼?
[root@vm014601 ~]# sysctl -a |grep fs.file-max?
fs.file-max = 200592?
[root@vm014601 ~]# echo "fs.file-max = 2005920" >> /etc/sysctl.conf??
[root@vm014601 ~]# sysctl -p?
[root@vm014601 ~]# cat /proc/sys/fs/file-max?????????????????????????
2005920?
file-nr是只讀文件,第一個(gè)數(shù)代表了目前分配的文件句柄數(shù);第二個(gè)數(shù)代表了系統(tǒng)分配的最大文件句柄數(shù);比如線上系統(tǒng)查看結(jié)果:
Shell代碼?
# cat /proc/sys/fs/file-max?
1106537?
# cat /proc/sys/fs/file-nr??????
1088? 0?????? 1106537?
# lsof | wc -l?
1506?
可以看到file-nr和lsof的值不是很一致,但是數(shù)量級(jí)一致。為什么會(huì)不一致?原因如下:
寫道
lsof是列出系統(tǒng)所占用的資源,但是這些資源不一定會(huì)占用打開(kāi)文件號(hào)的.
比如共享內(nèi)存,信號(hào)量,消息隊(duì)列,內(nèi)存映射等,雖然占用了這些資源,但不占用打開(kāi)文件號(hào)。
我曾經(jīng)在前端機(jī)上很長(zhǎng)時(shí)間都無(wú)法得到lsof | wc -l 的結(jié)果,這個(gè)時(shí)候可以通過(guò)file-nr粗略的估算一下打開(kāi)的文件句柄數(shù)。
3. sysckernel.threads-max
指定了內(nèi)核所能使用的線程(所有進(jìn)程打開(kāi)線程之和)的最大數(shù)目,通過(guò)命令 “cat /proc/sys/kernel/threads-max” 查看當(dāng)前值。查看和設(shè)置例如:
Shell代碼?
sysctl -a | grep threads?
vm.nr_pdflush_threads = 2?
kernel.threads-max = 229376?
本廠系統(tǒng)配置允許打開(kāi)的線程數(shù) > 229k
如果此值設(shè)小了會(huì)導(dǎo)致:-bash: fork: Resource temporarily unavailable
4. 為什么有限制?
為什么Linux內(nèi)核對(duì)文件句柄數(shù)、線程和進(jìn)程的最大打開(kāi)數(shù)進(jìn)行了限制?以及如果我們把它調(diào)的太大,會(huì)產(chǎn)生什么樣的后果?
原因1 - 資源問(wèn)題:the operating system needs memory to manage each open file, and memory is a limited resource - especially on embedded systems.
原因2 - 安全問(wèn)題:if there were no limits, a userland software would be able to create files endlessly until the server goes down.
最主要的是資源問(wèn)題,為防止某一單一進(jìn)程打開(kāi)過(guò)多文件描述符而耗盡系統(tǒng)資源,對(duì)進(jìn)程打開(kāi)文件數(shù)做了限制。
5. 設(shè)置成多少比較合適?
網(wǎng)上有朋友給了估算公式:file-max number = RAM size/10k;
I am not a kernel expert, but as far as I can see, the default for file-max seems to be RAM size divided by 10k. As the real memory used per file handler should be much smaller (size of struct file plus some driver dependent memory), this seems a quite conservative limit. – jofel Apr 19 at 16:43
那么一個(gè)12G RAM 的前端機(jī)可以打開(kāi)接近1M的文件。真的可以打開(kāi)1百萬(wàn)個(gè)文件嗎?
為了試驗(yàn),基于MINA寫了一個(gè)NIO服務(wù),在一個(gè)服務(wù)上創(chuàng)建了50萬(wàn)活躍率約為1%的TCP連接。觀察內(nèi)存使用 < 4.5G,可以粗略認(rèn)為單個(gè)socket連接使用內(nèi)存小于10K。因此可以用上面的公式來(lái)簡(jiǎn)單估算。
原文
http://maoyidao.iteye.com/blog/1744309
轉(zhuǎn)載于:https://www.cnblogs.com/mydomain/archive/2013/05/14/3077036.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Linux系统资源限制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Unsupported compiler
- 下一篇: 一般函数指针和类(非MFC)的成员函数指