• Linux 打开的文件过多 too many open files


    Linux系统中如果一个进程打开文件或者socket连接过多,有没有及时处理和关闭掉文件或连接,当该进程打开文件的数量超过open files的数量时候,就会报too many open files的错误

    Linux open files可以在进程级别限制
    ulimit -a 命令可以看到open files进程级别限制的大小。
    如果当前open files配置的是1024,则这个进程最多只能打开1024个文件,/proc/{pid}/fd 目录下的打开文件描述符的数量不会超过1024, 使用 lsof -p {pid} | wc -l 来查看进程打开的文件数, 超过1024则报too many open files的错误,这时候其他进程仍然可以打开文件,进程之间互不影响。

    可以临时通过 ulimit -n 65535 这样设置 open files为65535,然后在同一个用户session下重新启动程序。这样的设置只能在Session级别生效,如果切换用户或者切换shell session就失效了。如果要永久生效,需要修改/etc/security/limits.conf文件,在文件末尾添加下列参数并重启机器。

    * soft nofile 65535
    * hard nofile 65535
    
    • 1
    • 2

    什么是open file(打开的文件)
    打开的文件可以是常规文件、目录、块特殊文件、字符特殊文件、执行文本引用、库、流或网络文件。

    什么是file descriptor(文件描述符)
    文件描述符是程序用来获取文件句柄的数据结构。文件描述符在形式上是一个非负整数。习惯上,标准输入(standard input)的文件描述符是0,标准输出(standard output)是1,标准错误(standard error)是2。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于Unix、Linux这样的操作系统。

    一个文件即使被打开,也可能没有文件描述符,比如当前工作目录、内存映射文件和可执行文本文件。

    查询某个进程打开的文件列表

    lsof | grep {pid}
    
    • 1

    查询某个进程打开的文件数目

    lsof | grep {pid} | wc -l
    
    • 1

    查询进程使用的文件描述符

    ls -l /proc/{pid}/fd/
    
    • 1

    查询进程使用的文件描述符数目

    ls -l /proc/{pid}/fd/ | wc -l
    
    • 1

    查看系统文件描述符的最大设置

    cat /proc/sys/fs/file-max
    
    • 1

    系统当前被使用的文件描述符数目

    cat /proc/sys/fs/file-nr
    
    • 1
  • 相关阅读:
    QDateEdit开发详解
    [附源码]Python计算机毕业设计Django考试系统
    Java 反射效率
    外贸全流程30个邮件模板分享
    前端使用 Konva 实现可视化设计器(9)- 另存为SVG
    TypeScript 中 Type 和 Interface 有什么区别?
    ssh总是很短时间自动断开连接
    Azure Synapse Analytics 性能优化指南(2)——使用具体化视图优化性能(上)
    科研笔记第三期——一条文章带你玩转柱状图
    5G时代,华为云CDN为互联网海量数据内容分发服务保驾护航
  • 原文地址:https://blog.csdn.net/yuanchengmm/article/details/128075008