【转载】性能测试 too many open files 的问题,让服务器支持更多连接数

本文转载自 https://testerhome.com/topics/16364

问题背景

我们在进行压测的时候,经常会遇到,当你的服务器在大并发达到一定数值时,就会报出“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 modify limit: Operation not permitted。

若是需要永久修改,就行需要在配置文件中修改。

编辑 /etc/security/limits.conf 文件, 加入如下行:

vi /etc/security/limits.conf

  • hard nofile 1020000
  • soft nofile 1020000

本文转载自 https://testerhome.com/topics/16364

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值