Linux系统资源限制
Linux系統(tǒng)資源限制
1. 最大文件數(shù)
查看進(jìn)程允許打開的最大文件句柄數(shù):ulimit -n
查看進(jìn)程所占的文件描述符: lsof -p xxx | wc -l
設(shè)置進(jìn)程能打開的最大文件句柄數(shù):ulimit -n xxx
2. ulimit -n vs. file-max ?
簡單的說, ulimit -n控制進(jìn)程級別能夠打開的文件句柄的數(shù)量, 而max-file表示系統(tǒng)級別的能夠打開的文件句柄的數(shù)量。
ulimit -n的設(shè)置在重啟機(jī)器后會丟失,因此需要修改limits.conf的限制,limits.conf中有兩個值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)能打開的最大文件數(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是只讀文件,第一個數(shù)代表了目前分配的文件句柄數(shù);第二個數(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ù)量級一致。為什么會不一致?原因如下:
寫道
lsof是列出系統(tǒng)所占用的資源,但是這些資源不一定會占用打開文件號的.
比如共享內(nèi)存,信號量,消息隊(duì)列,內(nèi)存映射等,雖然占用了這些資源,但不占用打開文件號。
我曾經(jīng)在前端機(jī)上很長時間都無法得到lsof | wc -l 的結(jié)果,這個時候可以通過file-nr粗略的估算一下打開的文件句柄數(shù)。
3. sysckernel.threads-max
指定了內(nèi)核所能使用的線程(所有進(jìn)程打開線程之和)的最大數(shù)目,通過命令 “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)配置允許打開的線程數(shù) > 229k
如果此值設(shè)小了會導(dǎo)致:-bash: fork: Resource temporarily unavailable
4. 為什么有限制?
為什么Linux內(nèi)核對文件句柄數(shù)、線程和進(jìn)程的最大打開數(shù)進(jìn)行了限制?以及如果我們把它調(diào)的太大,會產(chǎn)生什么樣的后果?
原因1 - 資源問題:the operating system needs memory to manage each open file, and memory is a limited resource - especially on embedded systems.
原因2 - 安全問題:if there were no limits, a userland software would be able to create files endlessly until the server goes down.
最主要的是資源問題,為防止某一單一進(jìn)程打開過多文件描述符而耗盡系統(tǒng)資源,對進(jìn)程打開文件數(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
那么一個12G RAM 的前端機(jī)可以打開接近1M的文件。真的可以打開1百萬個文件嗎?
為了試驗(yàn),基于MINA寫了一個NIO服務(wù),在一個服務(wù)上創(chuàng)建了50萬活躍率約為1%的TCP連接。觀察內(nèi)存使用 < 4.5G,可以粗略認(rèn)為單個socket連接使用內(nèi)存小于10K。因此可以用上面的公式來簡單估算。
原文
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系统资源限制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unsupported compiler
- 下一篇: linux网络编程之socket(十一)