Linux系统资源限制
Linux系統資源限制
1. 最大文件數
查看進程允許打開的最大文件句柄數:ulimit -n
查看進程所占的文件描述符: lsof -p xxx | wc -l
設置進程能打開的最大文件句柄數:ulimit -n xxx
2. ulimit -n vs. file-max ?
簡單的說, ulimit -n控制進程級別能夠打開的文件句柄的數量, 而max-file表示系統級別的能夠打開的文件句柄的數量。
ulimit -n的設置在重啟機器后會丟失,因此需要修改limits.conf的限制,limits.conf中有兩個值soft和hard,soft代表只警告,hard代表真正的限制
Cat /etc/security/limits.conf代碼?
*?????????????? soft??? nofile????????? 150000?
*?????????????? hard??? nofile????????? 150000?
這里我們把soft和hard設置成一樣的。
“cat /proc/sys/fs/file-max”,或“sysctl -a | grep fs.file-max”查看系統能打開的最大文件數。查看和設置例如:
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是只讀文件,第一個數代表了目前分配的文件句柄數;第二個數代表了系統分配的最大文件句柄數;比如線上系統查看結果:
Shell代碼?
# cat /proc/sys/fs/file-max?
1106537?
# cat /proc/sys/fs/file-nr??????
1088? 0?????? 1106537?
# lsof | wc -l?
1506?
可以看到file-nr和lsof的值不是很一致,但是數量級一致。為什么會不一致?原因如下:
寫道
lsof是列出系統所占用的資源,但是這些資源不一定會占用打開文件號的.
比如共享內存,信號量,消息隊列,內存映射等,雖然占用了這些資源,但不占用打開文件號。
我曾經在前端機上很長時間都無法得到lsof | wc -l 的結果,這個時候可以通過file-nr粗略的估算一下打開的文件句柄數。
3. sysckernel.threads-max
指定了內核所能使用的線程(所有進程打開線程之和)的最大數目,通過命令 “cat /proc/sys/kernel/threads-max” 查看當前值。查看和設置例如:
Shell代碼?
sysctl -a | grep threads?
vm.nr_pdflush_threads = 2?
kernel.threads-max = 229376?
本廠系統配置允許打開的線程數 > 229k
如果此值設小了會導致:-bash: fork: Resource temporarily unavailable
4. 為什么有限制?
為什么Linux內核對文件句柄數、線程和進程的最大打開數進行了限制?以及如果我們把它調的太大,會產生什么樣的后果?
原因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.
最主要的是資源問題,為防止某一單一進程打開過多文件描述符而耗盡系統資源,對進程打開文件數做了限制。
5. 設置成多少比較合適?
網上有朋友給了估算公式: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 的前端機可以打開接近1M的文件。真的可以打開1百萬個文件嗎?
為了試驗,基于MINA寫了一個NIO服務,在一個服務上創建了50萬活躍率約為1%的TCP連接。觀察內存使用 < 4.5G,可以粗略認為單個socket連接使用內存小于10K。因此可以用上面的公式來簡單估算。
原文
http://maoyidao.iteye.com/blog/1744309
轉載于:https://www.cnblogs.com/mydomain/archive/2013/05/14/3077036.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Linux系统资源限制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unsupported compiler
- 下一篇: 一般函数指针和类(非MFC)的成员函数指