千家信息网

Ulimit的故障怎么解决

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"Ulimit的故障怎么解决",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Ulimit的故障怎么解决"吧!最近遇到一个非常有趣的问题。其中
千家信息网最后更新 2026年10月31日Ulimit的故障怎么解决

本篇内容主要讲解"Ulimit的故障怎么解决",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Ulimit的故障怎么解决"吧!

最近遇到一个非常有趣的问题。其中有一组HAProxy,频繁出现问题。登录上服务器,cpu、内存、网络、io一顿猛查。最终发现,机器上处于TIME_WAIT状态的连接,多达6万多个。

TIME_WAIT状态,一般都会出现在HAProxy、Nginx这种代理机器上,主要是由于频繁的主动关闭所造成的。通过修改reuse和回收参数,可以比较快速的解决问题。

网络状态的统计数量,可以使用下面的命令进行统计。

netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}' ESTABLISHED 70 FIN_WAIT2 30 CLOSING 33 TIME_WAIT 65520

这本来没什么神奇的,但65535这个数字,实在是太过于敏感。应该是触发了某种上限。

使我们更加感到疑惑的是:为什么TIME_WAIT状态的连接,仅仅达到了65535,服务就不可用了?

到处号称的单机百万连接,是在吹牛皮么?怎么这么经不起折腾?

65535,表示等于2的16次方减一,是一个神奇的数字。先把这小数字扔在一边,我们来看一下Linux到底能支持多少个连接。

1. Linux能够支持多少连接?

答案是无数个。可是端口只有65535个啊。

为什么端口只有65535个?

这是一个历史原因,因为在TCP、UDP协议的开头,会分别有16位来存储源端口号和目标端口号。很遗憾的是,这个值是short类型的,大小也是2^16-1。

因为历史原因造成的不可改变的标准,就是那么根深蒂固。

那Linux到底能支持多少个连接呢?答案是无数个。

拿nginx来说,我们把它监听在80端口上。这时候A机器去连接Nginx,可以发起多达6w多条长连接。如果B机器去连接Nginx,同样也可以发起6w多条连接。这是由于确定一条连接,是由src和dst来共同决定的。

认为Linux只能接受65535条连接的想法,只能说是犯了非常浅显的想当然主义。

65535个端口,作为压测机可能对你来说太小了一些。但对于服务器来说,已经绰绰有余了。

2. 如何支持百万连接?

从上面可以看到,连接数,是没有限制的。但Linux还有一层防护,那就是文件句柄数。通过lsof命令查看到的那些东西,就是所谓的文件句柄。

先来看一下几个命令的展示。

ulmit,展示了每个进程所能占用的文件句柄数量。

ulimit -n 65535

file-max,展示了操作系统能够占用的文件句柄数量总和,针对的是所有的进程。

cat /proc/sys/fs/file-max 766722

file-nr,展示了当前已经使用的句柄数量和总的句柄数量。可以拿来做监控。

cat /proc/sys/fs/file-nr 1824  0 766722

要支持百万连接,既要放开操作系统级别的句柄,也要放开进程级别的句柄。也就是说,ulimit和file-max的显示,都要大于百万才成。

3. 如何设置?

设置进程的句柄个数,常用的方式就有ulimit,但是非常非常不推荐。原因无他,只有在同一个shell中启动的进程,ulimit的设置才会生效。你打开另外一个shell,或者重启机器,ulimit的改动都会丢失。就是下面这种方式:

ulimit -n 1000000

正确的方式,是修改/etc/security/limits.conf文件。比如下面的内容。

root soft nofile 1000000 root hard nofile 1000000 * soft nofile 1000000 * hard nofile 1000000

可以看到,我们可以针对于特定的用户,修改其句柄数量。这在安装es等应用时,经常碰到。

es  -  nofile  65535

但即使是这种方式,也要求你需要打开一个新的shell进行操作。在当前修改的shell里或者修改之前的shell里,同样不生效。xjjdog就曾遇到过多起这样明明放开了限制,但还是发生问题的案例。

要看到这些改变是否已经对进程生效,可以查看进程的内存映射文件。比如cat /proc/180323/limits,其中会有详细的展示。

这个数值,也并不是想要设多大就多大的。它的大小上限,是由nr_open决定的。想要更大,就要修改/ect/sysct.conf 中fs.nr_open的值。

cat /proc/sys/fs/nr_open 1048576

那file-max又该如何修改呢?建议修改/etc/sysctl.conf文件,加入下面内容。足足有6百多万!

fs.file-max = 6553560

当文件数量超出的时候,就会报kernel: VFS: file-max limit 65535 reached的错误。

总结一下。

Linux即使放开一个端口,能够接受的连接也是海量的。这些连接的上限,受到单进程文件句柄数量和操作系统文件句柄数量的限制,也就是ulimit和file-max。

为了能够将参数修改持久化,我们倾向于将改动写入到文件里。进程的文件句柄限制,可以放在/etc/security/limits.conf中,它的上限受到fs.nr_open的制约;操作系统的文件句柄限制,可以放到/etc/sysctl.conf文件中。最后,别忘了在/proc/$id/limits文件中,确认修改是否对进程生效了。

到此,相信大家对"Ulimit的故障怎么解决"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

文件 句柄 进程 数量 机器 端口 支持 限制 操作系统 上限 内容 就是 方式 状态 系统 问题 故障 原因 只有 命令 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡豆 上海挚品互联网科技有限公司 科技创新互联网企业 四个字互联网科技公司取名 成都玖崟互联网科技有限公司乐商圈怎么样 恒银科技与互联网金融 顶级互联网科技成果有哪些 重庆威客帮互联网科技 佳云科技和互联网广告 西安小鹰速贷互联网科技有限公司 晋城互联网科技 工业互联网等科技实现智能化赋能 黑云互联网科技有限公司 厦门江牛科技互联网 2021世界互联网领先科技成果发布 易企秀互联网科技是做什么的 互联网科技接地气 安徽零酒互联网科技有限公司 互联网对科技影响 杭州科技互联网公司有哪些 北京路客互联网科技有限公司 美国互联网科技 科技与互联网的利与弊 天速互联网络科技有限公司 广州优美互联网科技 宁夏众和广鑫互联网科技有限公司 互联网公司黑科技创始人 翼展科技 首家互联网医院 深圳互联网科技的发展 21世纪互联网科技成就
0