标签: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 常见于高并发访问文件系统,多线程网络连接等场景。
程序经常访问的 文件、socket在Linux中都是文件。系统需要记录每个当前访问的file的name、location、access authority等相关信息,这样的一个实体被称为file entry。“open files table”(图中橙色标识)存储这些file entry,以数组的形式线性管理。文件描述符(file descriptor)作为进程到open files table的指针,也就是open files table的下标索引,将每个进程与它所访问的文件关联起来。
每个进程中都一个file descriptor table管理当前进程所访问(open or create)的所有文件,文件描述符关联着open files table 中的file entry。对于open files table能容纳多少file entry。Linux系统配置open files table的文件限制,如果超过配置值,就会拒绝其它文件操作的请求,并抛出Too many open files异常。
这种限制有系统级和用户级之分。
系统级:
系统级设置对所有用户有效。可通过两种方式查看系统最大文件限制
cat /proc/sys/fs/file-max
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
标签:linux 文件描述符
原文地址:http://medone.blog.51cto.com/9469723/1580981