首页 > 系统相关 >linux文件句柄数满,linux文件句柄数超出系统限制怎么办?

linux文件句柄数满,linux文件句柄数超出系统限制怎么办?

时间:2024-04-24 10:14:49浏览次数:22  
标签:profile 文件 限制 ulimit 句柄 etc linux

1、问题阐述:

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

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

2、产生的原因:

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

3、经典案例:

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

 

4、解决方案:

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

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

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

对这个值的修改,退出了当前的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 ''|sort|uniq -c|sort -nr

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

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

 

参考链接:https://blog.csdn.net/weixin_36308404/article/details/116580902

标签:profile,文件,限制,ulimit,句柄,etc,linux
From: https://www.cnblogs.com/1175429393wljblog/p/18154447

相关文章

  • linux 中删除空行(包括空行、空格、制表符)
     001、测试数据[root@pc1test02]#lsa.txt[root@pc1test02]#cata.txt010203040506070809101112[root@pc1test02]#cat-Aa.txt##测试数据中包括什么也无、空格、制表符、空格+制表符的几种情况010203$$040506$$070809$^I^I$1011......
  • FormData传输JSON同时上传单个/多个文件问题
    背景最近在开发一个功能时,涉及到向后端接口发送:JSON请求参数多个文件刚开始想通过RequestBody(application/json)形式进行传值,但是文件不好处理。有一个通过application/json传输文件数据的方法,就是将文件转成base64,然后在后端进行处理。但是这种方式涉及到大文件传输的时候,转......
  • 将C++代码文件路径、行号、函数名称等打包到#pragma message输出的方法
    #include<iostream>#define__GEN_STRING_IMPL(x)#x#define__GEN_STRING(x)__GEN_STRING_IMPL(x)#define__GEN_LOCATION_STRING()__FILE__"("__GEN_STRING(__LINE__)"):"classCTestObject{public:voidprint1(){......
  • 银行业外发重要文件用什么才安全?外发文件专业软件必选项
    银行业对一个国家至关重要,关乎国计民生。银行为我国经济建设分配资金,是社会再生产顺利进行的纽带,它能掌握和反应社会经济活动的信息,为企业和政府作出正确的经济决策提供必要的依据。通过银行,可以对国民经济各部门和企业的生产经营活动进行监督和管理,优化产业结构,提高国民经济效......
  • 修改jar里的.xml等文件内容
    修改jar里的.xml等文件内容将jar文件解压。修改解压后的xml文件。替换修改的文件或重新打包jar文件。#解压jar文件jar-xfexample.jar#修改需要更改的xml文件内容后#替换修改的文件jar-ufexample.jar./mapper/example.xml#或者#删除原始的jar文件后......
  • 军工单位安全内网文件导出,怎样做到严密的安全管控?
    军工单位是指承担国家下达的军事装备、产品研制、生产计划任务的企、事业单位,主要包括电子工业部、航空工业总公司、航天工业总公司、兵器工业总公司、核工业总公司、船舶工业总公司、中国工程物理研究院及各省国防工业办公室等。 军工单位的特点主要体现在以下几个方面:承担......
  • linux查看文件最后的修改时间
    文件时间主要包括三种:访问时间、修改时间和更改时间。执行:#statfilename.txt1、查看文件的修改时间atime访问时间指的是文件最后一次被访问的时间。要查看文件的访问时间,可以使用stat命令,并结合awk命令来提取时间信息。示例如下:stat-c%xredis.log2、查看文件的修改时间......
  • Markdowmtoblog 文件图片上传
    pycnblog博客园上传markdown文件https://www.cnblogs.com/df888/p/11826480.html注意博客园6.21更新,MetaWeblog现在不支持密码登录,需要通过访问令牌(accesstoken)登录,在博客后台设置页面,允许MetaWeblog博客客户端访问,下方有MetaWeblog访问令牌,点击查看,创建访问令牌。功能一......
  • FreeCAD导入立创EDA下载的元件step文件档无法删除PCB部分
    1.问题描述   在使用freeCAD导入step文件的时候,一开始会导入成一个成体,想隐藏某些部件,却只能隐藏整个装配体,就是图示位置无法展开,无法删除部件。2.解决方法找到编辑==》首选项 ==》Import-Export==》STEP==》导入 启用STEP复合合并。不打钩就可以了。  设置好......
  • macOS配置Clion用于STM32开发找不到stdint.h等头文件问题解决方案
    问题编译工程时发现出现大量类似错误如下/opt/homebrew/Cellar/arm-none-eabi-gcc/13.2.0/lib/gcc/arm-none-eabi/13.2.0/include/stdint.h:9:16:fatalerror:stdint.h:Nosuchfileordirectory问题原因不能使用brewinstallarm-none-eabi-gcc安装编译工具链[1]解决方......