Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1477796
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类: LINUX

2013-03-22 15:23:36

     最近线上的一模块报Too many open files错误,引起这个错误的原因是进程打开文件超过了限制。
   
先不着急修改限制,看了下模块逻辑是否正常,是否有忘记关闭的文件描述符,逻辑没有问题。好开始修改系统限制,首先确认系统能打开的最大句柄数,一般来说这个数字比较大不用修改,如果要修改,则 编辑 /etc/sysctl.conf  文件增加两行 fs.file-max = 65536 和 fs.inode-max = 262144 。
其次编辑/etc/security/limits.conf,加入* - nofile 8192。使用命令:ulimit -a   确认下当前用户允许打开的最大文件数是否为8192。
    修改完手动启动模块,一切ok。但试着让软件狗开启模块,还是继续报错误。软件狗在系统开机时启动,核心代码是检查模块是否活着,不活着就启动模块,模块也就作为软件狗的子进程存在,难道是子进程继承父进程的资源策略,上网Google找到了相关介绍
http://luckywhu.blog.163.com/blog/static/1840779442011112111443770/
   软件狗继承系统赋予的默认限制,最大打开1024个句柄,由软件狗启动模块继承软件狗的限制,因此最大只能打开1024个文件句柄。由于设置了limits.conf,新打开的bash进程最大打开8192个文件句柄,在该bash上手工开启的模块也继承该bash进程的资源限制。
   ulimit -Sn 只是修改当前bash进程的资源限制,并不影响其它的已打开bash,新打开bash及它们的子进程。

阅读(836) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~