码迷,mamicode.com
首页 > 其他好文 > 详细

Too many open files

时间:2014-11-21 19:01:28      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:linux 文件描述符

环境:

192.168.128.111(ha1.haproxy.org) -> CentOS 6.3 64bit    siege 2.78
192.168.128.10(n1.web.org) -> CentOS 6.5 64bit     nginx 1.6.2

在192.168.128.111上使用siege对192.168.128.10的nginx做压力测试

[root@ha1 bin]# siege -c 6500 -r 1 "

Transactions:                   5827 hits
Availability:                  89.65 %
Elapsed time:                  25.58 secs
Data transferred:               3.40 MB
Response time:                  0.77 secs
Transaction rate:             227.80 trans/sec
Throughput:                     0.13 MB/sec
Concurrency:                  175.30
Successful transactions:        5827
Failed transactions:             673
Longest transaction:            6.10
Shortest transaction:           0.00

可以看到有673个失败,其中报了很多的错误,如下:

[error] descriptor table full sock.c:109: Too many open files

到n1.web.org服务器上

[root@n1 ~]# ulimit -n
1024
修改此值
[root@n1 ~]# ulimit -SHn 65535
[root@n1 ~]# ulimit -n
65535
[root@n1 ~]#

再回到ha1.haproxy.org服务器上进行测试,测试了两次结果如下:

Transactions:                   6500 hits
Availability:                 100.00 %
Elapsed time:                  11.34 secs
Data transferred:               3.79 MB
Response time:                  0.46 secs
Transaction rate:             573.19 trans/sec
Throughput:                     0.33 MB/sec
Concurrency:                  264.64
Successful transactions:        6500
Failed transactions:               0
Longest transaction:            4.66
Shortest transaction:           0.00
Transactions:                   6457 hits
Availability:                  99.34 %
Elapsed time:                  15.31 secs
Data transferred:               3.77 MB
Response time:                  0.75 secs
Transaction rate:             421.75 trans/sec
Throughput:                     0.25 MB/sec
Concurrency:                  316.52
Successful transactions:        6457
Failed transactions:              43
Longest transaction:            6.56
Shortest transaction:           0.00


以下说明转载【每天一小步

Too many open files 常见于高并发访问文件系统,多线程网络连接等场景。

程序经常访问的 文件、socketLinux中都是文件。系统需要记录每个当前访问的filenamelocationaccess authority等相关信息,这样的一个实体被称为file entry。“open files table”(图中橙色标识)存储这些file entry,以数组的形式线性管理。文件描述符(file descriptor)作为进程到open files table的指针,也就是open files table的下标索引,将每个进程与它所访问的文件关联起来。

bubuko.com,布布扣

每个进程中都一个file descriptor table管理当前进程所访问(open or create)的所有文件,文件描述符关联着open files table 中的file entry。对于open files table能容纳多少file entryLinux系统配置open files table的文件限制,如果超过配置值,就会拒绝其它文件操作的请求,并抛出Too many open files异常。

这种限制有系统级和用户级之分。

系统级:

系统级设置对所有用户有效。可通过两种方式查看系统最大文件限制

  1. cat     /proc/sys/fs/file-max

  2. sysctl -a 查看结果中fs.file-max这项的配置数量

如果需要增加配置数量就修改/etc/sysctl.conf文件,配置fs.file-max属性,如果属性不存在就添加。

配置完成后需要使用sysctl -p通知系统启用此项配置

用户级:

Linux限制每个登录用户的可连接文件数。可通过ulimit -n查看当前有效设置。如果想修改这个值就使用ulimit -SHn <number>命令。

 对于文件描述符增加的比例,资料推荐是以2的幂次为参考。如当前文件描述符数量是1024,可增加到2048,如果不够,可设置到4096,依此类推。 



本文出自 “Me & Done” 博客,请务必保留此出处http://medone.blog.51cto.com/9469723/1580981

Too many open files

标签:linux 文件描述符

原文地址:http://medone.blog.51cto.com/9469723/1580981

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!