Toomanyopenfiles问题的解决.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Toomanyopenfiles问题的解决

在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量 socket连接也算在里面 。系统默认值1024。 对于一般的应用来说 象Apache、系统进程 1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看: lsof -n |awk print $2 |sort|uniq -c |sort -nr|more 在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下: # lsof -n|awk print $2 |sort|uniq -c |sort -nr|more 131 24204 57 24244 57 24231 56 24264?? 其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。 ps -aef|grep 24204?? mysql????24204 24162 99 16:15 00:24:25 /usr/sbin/mysqld?? 哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。 但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令: ulimit -HSn 4096?? 以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后。 findsun提出的办法比较合理 Too many open files经常在使用linux的时候出现,大多数情况是您的程序没有正常关闭一些资源引起的,所以出现这种情况,请检查io读写,socket通讯等是否正常关闭。 如果检查程序没有问题,那就有可能是linux默认的open files值太小,不能满足当前程序默认值的要求,比如数据库连接池的个数,tomcat请求连接的个数等。。。 查看当前系统open files的默认值,可执行: Java代码 [root@pororo script]# ulimit -a core file size blocks, -c 0?? data seg size kbytes, -d unlimited scheduling priority -e 0?? file size blocks, -f unlimited pending signals -i 128161?? max locked memory kbytes, -l 32?? max memory size kbytes, -m unlimited open files -n 800000?? pipe size 512 bytes, -p 8?? POSIX message queues bytes, -q 819200?? real-time priority -r 0?? stack size kbytes, -s 10240?? cpu time seconds, -t unlimited max user processes -u 128161?? virtual memory kbytes, -v unlimited file locks -x unlimited 如果发现open files项比较小,可以按如下方式更改: 1. 检查/proc/sys/fs/file-max文件来确认最大打开文件数已经被正确设置。 Java代码 # cat /proc/sys/fs/file-max 如果设置值太小,修改文件/etc/sysctl.conf的变量到合适的值。这样会在每次重启之后生效。 如果设置值够大,跳过这一步。 Java代码 # echo 2048 /proc/sys/fs/file-max 编辑文件/etc/sysctl.conf,插入下行: Java代码 fs.file-max 8192 2. 在/etc/security/limits.conf文件中设置最大打开文件数

文档评论(0)

kabudou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档