网络编程之IO复用机制(多路IO转接)之突破文件描述符上限05

1 查看本机一个进程最大的socket描述符上限

可以使用cat命令查看一个进程可以打开的socket描述符上限。

cat /proc/sys/fs/file-max

下面结果就是你的计算机最大可以打开的文件描述符上限,因为我的虚拟机是12.04很久的测试机,所以就是十万左右,比较低。
在这里插入图片描述

2 修改一个进程可以打开的socket描述符上限

上面我们说了一个计算机可以最大打开的文件描述符,注意上面的值确实是已经是最大的打开值,但是我们可以认为的在[0,101026]这个范围去调整一个进程最大的上限。但一般不需要改变,因为很少用到。如有需要,可以通过修改配置文件的方式修改该上限值。

sudo vi /etc/security/limits.conf

#在文件尾部写入以下配置,soft软限制,hard硬限制。如下图所示。,注意中间最好以tab对齐。
* soft nofile 65536		#默认电脑开启时,一个进程最大打开的文件描述符个数,可用ulimit -a查了open file,下面会进行讲解
* hard nofile 100000	#命令修改上限,也就是让我们在[0,101026]这个范围去调整一个进程最大的上限。

在这里插入图片描述

3 ulimit命令修改soft nofile默认单个进程的socket上限数

上面修改配置文件后,我们可以使用ulimit -a查看当前用户的一个进程最大文件描述符个数(注意上面的配置文件改后,所有的终端都会生效,也就是当前用户)。

  • 1)修改上面配置文件前,可以使用ulimit -a查看默认的soft nofile上限数,默认为1024(不查看也行)。然后修改配置文件后,将当前用户重启使配置文件生效。

  • 2)重启后,再次查看ulimit -a。

ulimit -a

结果如下:
在这里插入图片描述

  • 3)此时我们也可以修改默认单个进程的最大socket上限数。
ulimit -n 20000

在这里插入图片描述

  • 4)但是需要注意一点,当我们修改默认值后,它只能往下调整,不能再往上调整(第一次启动时是可以往上提的,此后就不能了,只能重启,也就是说每次启动只有一次往上提的机会),即使是root也不行。
    在这里插入图片描述
  • 5)若想重新往上调整,只能使当前用户重启,让刚刚的配置文件生效,这样就可以重新回到默认值65536。
  • 重启后的结果:在这里插入图片描述

4 总结

突破文件描述符上限一般的步骤是:

  • 1)按上面先修改配置文件/etc/security/limits.conf,然后重启生效。
  • 2)使用ulimit -n xxx修改自己规定的单个进程最大允许socket个数。
  • 3)hard nofile 100000硬件这个值,一旦我们配置完之后就用不到,不需要理会。我们使用ulimit -n修改的是soft nofile软限制。
  • 4)而这个修改主要是针对poll,epoll这两个函数。select是没有作用的,因为它最大1024,即使修改了配置文件也无法突破这个限制。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值