[原创]解决too many files open的三个内核变量_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2176 | 回复: 0   主题: [原创]解决too many files open的三个内核变量        下一篇 
wulcan
版主
等级:中校
经验:1795
发帖:124
精华:0
注册:2014-3-19
状态:离线
发送短消息息给wulcan 加好友    发送短消息息给wulcan 发消息
发表于: IP:您无权察看 2015-5-21 10:44:20 | [全部帖] [楼主帖] 楼主

简单说,最常用的有三个:

kern.maxfiles: 最多打开多少个文件,是整个系统中所有进程打开文件总数限制

kern.openfiles: 当前打开了多少个文件,也是整个系统中的,这个数量不能超过maxfiles,否则就会被拒绝,从而导致错误,可以经常监控这个参数,但是这不是唯一的监控变量。

kern.maxfilesperproc: 每个进程最多可以打开多少个文件

在很多WEB的优化策略中,仅仅是优化了kern.maxfiles,一般限制为65535,其实这对于繁忙的系统来说,远远不够,特别是php系统,不仅被读取的文件要打开,nginx要开很多线程对php的socket进行读取,这也计算在打开文件行列,而每个php-fcgi进程,也需要打开对应的.php文件,所以系统中的打开文件数,很轻松就能过几十万。

而对于nginx来说,它主要是线程工作,开的进程不多,面对成千上万的请求,它会开数千、甚至上万个线程来连接php和打开用户请求的文件,这些线程打开的所有文件,会计算在同一个进程内,从而达到同一进程的打开文件数限制,也就是kern.maxfilesperproc,这时在nginx-error.log里会记录下too many files open的错误。

所以遇到too many files open错误的时候,不仅要提高maxfiles,还要提高kern.maxfilesperproc,这样才能提高nginx和php的连接数,如果系统中cpu数量多的话,可以多开向个work,这样可以减少每个进程的打开文件数。

另外php还有一个最大的连接数,也会导致too many files open。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论