linux 端口数 句柄数,linux文件句柄数

1、问题阐述:linux

too many open files:顾名思义即打开过多文件数。shell

不过这里的files不单是文件的意思,也包括打开的通信连接(好比socket),正在监听的端口等等,因此有时候也能够叫作句柄(handle),这个错误一般也能够叫作句柄数超出系统限制。bash

二、产生的缘由:服务器

常常在使用linux的时候出现,大多数状况是因为程序没有正常关闭一些资源引发的,因此出现这种状况,请检查io读写,socket通信等是否正常关闭。socket

三、经典案例:学习

不少项目上线不久运行了一段时间后,服务忽然宕了,经检查日志,出现了too many open files 错误。spa

968762cf962f6b7418c99a2995e5aff7.png

四、解决方案:日志

前奏:其实Linux是有文件句柄限制的,并且默认不是很高,通常都是1024,做为一台生产服务器,其实很容易就达到 这个数量,所以咱们须要把这个值改大一些。咱们能够用ulimit -n 来查看当前用户句柄数限制。那么这个1024是系统的限制,仍是用户的限制呢。其实,这个是用户限制来的,完整的说法,应该是当前用户准备要运行的程序的限制。blog

一、这个限制是针对单个程序的限制进程

二、这个限制不会改变以前已经运行了的程序的限制

三、对这个值的修改,退出了当前的shell就会消失

所以出现这种问题有两种解决方式:

第一:增大文件句柄数。这种方式能及时解决问题,可是不可以完全的解决问题,能够为完全解决问题提供必定的时间保证。那么如何增大文件句柄数数呢?

如修改文件句柄数为65535,ulimit -n 65535.此时系统的文件句柄数为65535.

2)将ulimit 值添加到/etc/profile文件中(适用于有root权限登陆的系统)

为了每次系统从新启动时,均可以获取更大的ulimit值,将ulimit 加入到/etc/profile 文件底部。

echo ulimit -n 65535 >>/etc/profile

source /etc/profile    #加载修改后的profile

ulimit -n     #显示65535,修改完毕!

到此为止,你觉得大功告成了么,其实否则,忽然发现本身再次登陆进来的时候,ulimit的值仍是1024,这是为何呢? 用户登陆的时候执行sh脚本的顺序:

/etc/profile.d/file

/etc/profile

/etc/bashrc

/mingjie/.bashrc

/mingjie/.bash_profile

因为ulimit -n的脚本命令加载在第二部分,用户登陆时因为权限缘由在第二步还不能完成ulimit的修改,因此ulimit的值仍是系统默认的1024。因此想完全改变这种问题,就必须作以下操做:修改/etc/security/limits.conf

里面有很详细的注释,好比

* soft nofile 2048

* hard nofile 32768

就能够将文件句柄限制统一改为软2048,硬32768

那么什么是软限制,什么是硬限制

硬限制是实际的限制,而软限制,是warnning限制,只会作出warning

这样就实实际际的增大了文件句柄数。

第二:分析句柄数,查找缘由,这是解决问题最根本的办法。那么如何分析那,就须要用到lsof这个命令了(关于这个命令你们能够在网上学习学习)。

(1)统计各进程打开句柄数:lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr

(2)统计各用户打开句柄数:lsof -n|awk '{print $3}'|sort|uniq -c|sort -nr

(3)统计各命令打开句柄数:lsof -n|awk '{print $1}'|sort|uniq -c|sort -nr

就掌商通来讲,经过命令分析发现是一个叫xmpp的东西打开的链接数居多,占到了单个进程总打开链接数的百分之八十以上,再仔细分析,xmpp是消息推送产生的链接,那么到这里问题比较明确了,接下来就是要分析为何消息推送会打开如此多的文件句柄,且一直连着也不断开。这样问题就定位了。另外还有一些进程打开文件句柄数也比较多,这时你能够对比其余服务器,看是否其余服务器也是如此,以保证全面的解决问题。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值