linux文件句柄数

article/2025/9/3 21:56:21

1、问题阐述:

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

不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。

2、产生的原因:

经常在使用linux的时候出现,大多数情况是由于程序没有正常关闭一些资源引起的,所以出现这种情况,请检查io读写,socket通讯等是否正常关闭。

3、经典案例:

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

在这里插入图片描述

4、解决方案:

前奏:其实Linux是有文件句柄限制的,而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到 这个数量,因此我们需要把这个值改大一些。我们可以用ulimit -n 来查看当前用户句柄数限制。那么这个1024是系统的限制,还是用户的限制呢。其实,这个是用户限制来的,完整的说法,应该是当前用户准备要运行的程序的限制。

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

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

3、对这个值的修改,退出了当前的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是消息推送产生的连接,那么到这里问题比较明确了,接下来就是要分析为什么消息推送会打开如此多的文件句柄,且一直连着也不断开。这样问题就定位了。另外还有一些进程打开文件句柄数也比较多,这时你可以对比其他服务器,看是否其他服务器也是如此,以保证全面的解决问题。


http://chatgpt.dhexx.cn/article/1fLSedvT.shtml

相关文章

windows 查看打开的文件句柄

经常当我们删除文件时,有时会提示【操作无法完成,因为文件已在另一个程序中打开,请关闭该文件并重试】, 这个时候可以资源监控器进行查看运行的进程打开的句柄列表。 具体结果如下显示:

Linux下文件句柄

Too many open files 如果Java打开文件的时候,没有关闭IO流,那么打开到一定数量,在Linux下就会抛出Too many open files的异常。 public static class HoldIOTask implements Runnable {Overridepublic void run() {int count0;try {while(t…

【Linux】文件句柄说明

Linux 文件句柄说明 Linux中所有的事物或资源都是以文件的形式存在,比如消息、共享内存、连接等,句柄可以理解为指向这些文件的指针。 对于这些句柄,Linux是有数量限制的,单个进程默认可以打开的句柄数上限,可以用以…

windows 文件句柄查询

windows经常出现删除/剪切文件时提示文件被占用的问题 打开任务管理器, 选择“性能”选项卡 2. 打开资源管理器, 在关联句柄查询框中输入关键字,过滤查询,然后右键选中对应项,结束任务即可释放句柄

文件句柄

一、文件句柄是什么? 对象在内存中是经常来回移动的,如何快速定位找到这个对象呢? 句柄说: “我来帮你找” windows系统给出的方案 1.进程创建时,windows系统为进程构造了一个句柄表 2.当该进程希望获得一个内核对…

linux开关机命令

shutdown -h now/或者是具体的时间hh:mm; 关机; -h:关机。;-r: 重启 ;-c: 取消前一个关机命令。一般就只用shutdown这个命令;halt,poweroff,init 0 关机;init 6&#xff…

Linux命令之关机命令

shutdown命令可以用来进行关闭系统,并且在关机以前传送讯息给所有使用者正在执行的程序,shutdown 也可以用来重开机使用者权限:管理员用户 语法如下: shutdown [-t seconds] [-rkhncfF] time [message] 参数说明: …

Linux 关机 命令

一、正确的关机方法 如果直接按下电源开关,数据有可能中断。若不正常关机,则有可能造成文件系统的损毁。因此,正常关机情况下,应注意以下: 1)查看系统的使用状态 查看目前有谁在线,使用“who…

部署图详解

部署图 一、部署图概要 ​ 部署图用于静态建模,是表示运行时过程节点结构、构件实例及其对象结构的图。如果含有依赖关系的构件实例放置在不同节点上,部署视图可以展示出执行过程中的瓶颈。部署图的两种表现形式:实例层部署图和描述层部署图…

EA_画部署图

EA_画部署图 新建部署图增加个性化图标画一个范围Boundary 新建部署图 右键–>添加图 增加个性化图标 右键图标–>外观–>选择可替代图像 选择自定义的图标 画一个范围Boundary

UML-----构件图与部署图

构件图和部署图这两个图都属于实现图。它是用来描述实现方面的信息。构件图用来显示一组构件之间的组织及依赖关系;而部署图则用来描述系统硬件的物理拓扑结构以及在此结构神执行的软件。 构件图 构件图是从软件结构的角度来描述一个系统的主要功能,如子…

移动端UML图应用之UML结构图——包图、部署图和组件图

系列文章目录 移动端UML图应用之UML图简述 移动端UML图应用之UML行为图——用例图、活动图和状态机图 移动端UML图应用之UML交互图——顺序图和通信图 移动端UML图应用之UML结构图——包图、部署图和组件图 移动端UML图应用之UML结构图——类图 文章目录 系列文章目录一、包图…

【UML建模】(7) UML建模之部署图

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通 ❤️ 2. Python爬虫专栏&#xf…

UML—部署图

一、简介: 部署图(Deployment Diagram)又名实施图。用来描述系统硬件的物理拓扑结构以及在此结构上执行的软件。显示了系统的硬件、安装在硬件上的软件、以及用于连接异构机器之间的中间件。系统所有的实施图一起表示系统的完整结构。具有以下…

【UML】部署图和构件图

一、实现图 1.UML中大部分模型描述了逻辑和设计方面的信息 2.实现图用来描述实现方面的信息 3.他从系统的层次来描述: (1)硬件的组成和布局 (2)软件系统划分和功能实现 4.实现图包括 (1)…

UML-部署图

今天我们来介绍下什么是部署图 一、部署图是什么? 部署图(deployment diagram,配置图)是用来显示系统中软件和硬件的物理架构。从部署图中,您可以了解到软件和硬件组件之间的物理关系以及处理节点的组件分布情况。使用部署图可以显示运行时系…

UML——实现图(构件图与部署图)

目录 实现图 构件图 构件的类型 构件的特点 构件与类 构件与接口 部署图 实现图 UML中大部分模型描述了逻辑和设计方面的信息,实现图用来描述实现方面的信息。 实现图有构件图和部署图两种形式 构件图:用来显示一组构件之间的组合与依赖关系。…

如何便捷绘制UML部署图?

四大部分,带你深入了解UML部署图: 什么是部署图? 部署图的组成 部署图实例 如何绘制部署图? 一、什么是部署图? 部署图描述的是系统运行时的结构,展示了系统的硬件配置、硬件部署,以及其软…

UML 部署图 deployment diagram

1. 什么是部署图 部署图描述的是系统运行时的结构,展示了硬件的配置及其软件如何部署到网络结构中。一个系统模型只有一个部署图,部署图通常用来帮助理解分布式系统。 2. 部署图中的事物 注:在rational rose工具中我还没找到怎么把构件放到节…

部署图的画法

部署图画法 1.部署图 1.1含义 部署图是把软件制品装配到计算机节点以及配置软件环境的工作 软件部署包含环境部署和软件制品部署 1.2软件部署 软件部署通过部署图对软件进行建模 1.3部署图 部署图常见的有制品 节点 设备 运行环境和部署规范 1.4部署图关系 在UML&…