51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2656|回复: 0
打印 上一主题 下一主题

[原创] 解决too many open files,让服务器支持百万并发

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-10-9 10:11:37 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
问题背景
我们在进行压测的时候,经常会遇到,当你的服务器在大并发达到一定数值时,就会报出“too many open files”的错误。
问题解析
这是因为,在Linux系统中任何一个对象都是一个文件,都需要占用一个文件句柄,我们在压测的时候,一个连接就是用到一个文件句柄,对于绝大部分 Linux 操作系统, 默认情况下只有1024个句柄数! 因为操作系统包含最大打开文件数(Max Open Files)限制, 分为系统全局的限制和进程级的限制。那么如何修改服务器本身的系统参数,让机器可以支撑百万的一个连接呢?
大家可持续关注公众号,大话性能,不断学习测试实战技能。

全局限制
首先是进行全局限制的一个修改。
在 Linux 下执行:
cat /proc/sys/fs/file-nr
会打印出类似下面的一行输出:
5100 0 101747
第三个数字 101747 就是当前系统的全局最大打开文件数(Max Open Files), 可以看到, 只有 10 万, 所以, 在这台服务器上无法支持百万,默认情况下很多系统的这个数值更小, 为了修改这个数值, 用 root 权限修改 /etc/sysctl.conf 文件:
fs.file-max = 1020000
net.ipv4.ip_conntrack_max = 1020000
net.ipv4.netfilter.ip_conntrack_max =1020000

进程限制
然后是修改进程限制
可以在服务器上先执行:ulimit -n,观察下结果
输出:
1024
说明当前 Linux 系统的每一个进程只能最多打开 1024 个文件. 为了支持百万连接,你同样需要修改这个限制.
若是临时修改,执行下面命令即可,比较快速。
ulimit -n 1020000
不过, 如果你不是 root, 可能不能修改超过 1024, 会报错:
-bash: ulimit: open files: cannot modifylimit: Operation not permitted。
若是需要永久修改,就行需要在配置文件中修改。
编辑 /etc/security/limits.conf 文件, 加入如下行:
vi /etc/security/limits.conf
hard nofile 1020000
soft nofile 1020000
完成上述2处修改,你的服务器本身就可以支撑起百万的一个连接了,而不会出现“too many open files”的错误。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-23 16:46 , Processed in 0.068235 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表