高性能网络编程 之 Linux文件句柄限制(一)

常 识 一 : 文 件 句 柄 限 制 \color{blue}常识一:文件句柄限制

在linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是“Socket/File:Can’t open so many files”。
这时你需要明白操作系统对可以打开的最大文件数的限制。

进 程 限 制 \color{green}进程限制

执行ulimit -n 输出 1024,说明对于一个进程而言最多只能打开1024个文件,所以你要采用此默认配置最多也就可以并发上千个TCP连接。临时修改:ulimit -n 1048576(最大值),但是这种临时修改只对当前登录用户目前的使用环境有效,系统重启或用户退出后就会失效。

永 久 修 改 : 编 辑 / e t c / s e c u r i t y / l i m i t s . c o n f , 在 其 后 添 加 如 下 内 容 : \color{orange}永久修改:编辑/etc/security/limits.conf,在其后添加如下内容: /etc/security/limits.conf
* soft nofile 1048576   # open files  (-n)
* hard nofile 1048576
* soft nproc  1048576   # max user processes   (-u)
* hard nproc  1048576

全 局 限 制 \color{green}全局限制

执行

cat /proc/sys/fs/file-nr 

输出

9344 0 592026

各项含义分别为:

  1. 已经分配的文件句柄数,
  2. 已经分配但没有使用的文件句柄数,
  3. 最大文件句柄数。

但在kernel 2.6版本中第二项的值总为0,这并不是一个错误,它实际上意味着已经分配的文件描述符无一浪费的都已经被使用了 。

我们可以把这个数值改大些,用 root 权限修改 /etc/sysctl.conf 文件:

fs.file-max = 1048576
net.ipv4.ip_conntrack_max = 1048576
net.ipv4.netfilter.ip_conntrack_max = 1048576
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值