作者:

Grey

原文地址:

Github

语雀

博客园

Too many open files是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。

通过命令ulimit -a可以查看当前系统设置的最大句柄数是多少

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31767
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31767
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited 

可以看到,open files的配置是1024,可以通过如下命令将open files增加

ulimit -n 65535 

这种修改方式可以临时把文件打开数量增加到65535,但是系统重启后这个配置会失效。

还有一种方式是修改系统的配置文件,以Ubuntu为例,配置文件默认在

/etc/security/limits.conf 

在这个配置文件中增加

* soft nofile 65535
* hard nofile 65535 

此外,如果用supervisor托管和启动项目,会遇到这个配置无法生效的问题,原因在于supervisor会默认配置打开的句柄数量是1024,

如果要查看某个进程最大open files,可以通过这个进程的进程号对应的limits查看

cat /proc/进程号/limits 

其中有一行是:

Max open files	1024	1024	bytes 

supervisor托管的程序这一行默认都是supervisor配置的最大数量1024,这时需要手动改一下supervisor的配置文件,修改方式如下,以Ubuntu系统为例,找到supervisor的配置文件supervisord.conf

在[supervisord]选项中,增加minfds选项的配置

[supervisord]
minfds=65535                  ; min. avail startup file descriptors; default 1024 

配置完毕后,需要重启supervisor(以systemctl为例)

systemctl restart supervisor 

即可生效

在通过:

cat /proc/进程号/limits 

查看下对应进程的可open files的数量

Max open files	65535	65535	bytes 

Linux下Too many open files问题排查与解决的更多相关文章

  1. Linux下安装svn教程

    前言最近买了新服务器,准备开始弄一些个人的开源项目。有了服务器当然是搞一波svn啦。方便自己的资料上传和下载。于是在......

  2. windows打包脚本出现 /bin/sh^M: 坏的解释器: 没有那个文件或目录 错误

    1.错误描述我在Windows 10 系统下打包dolphinscheduler,上传到centos7解压之后,执行......

  3. Linux下最常用的10个文件压缩工具

    作者简介李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术......

  4. linux源码安装软件的一般方法

    rhel系统貌似安装不了xmgrace,配置的时候居然说要那个M*tif库。百度了一下,需要openmotif库,然......

  5. Linux下使用timedatectl命令时间时区操作详解

    timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具......

  6. Linux磁盘空间释放问题整理

    IDC里的一台服务器的/分区使用率爆满了!已达到100%!经查看发现有个文件过大(80G),于是在跟有关同事确认后r......

  7. Linux下Too many open files问题排查与解决

    作者:Grey原文地址:Github语雀博客园Too many open files是Linux系统中常见的错误,从......

  8. 如何查看postgres数据库端口

    如下所示:Linux:netstat -a | grep PGSQL示例输出:[highgo@hgdbt data]......

  9. 超有用的linux笔记

    名词解释根目录说明tree -L 1.├── bin -> usr/bin # 英语binary的缩写,表示”......

  10. linux kernel操作GPIO函数

    一、头文件#include 二、注册 GPIO int gpio_request(unsigned gpio, co......

随机推荐

  1. linux源码安装软件的一般方法

    rhel系统貌似安装不了xmgrace,配置的时候居然说要那个M*tif库。百度了一下,需要openmotif库,然......

  2. 分别使用 Python 和 Math.Net 调用优化算法

    1. Rosenbrock 函数在数学最优化中,Rosenbrock 函数是一个用来测试最优化算法性能的非凸函数,由......

  3. php swoft框架实例用法

    在框架选择上,不少人会觉得swoft才是最强PHP框架,尤其是在常驻内存模式的应用级高性能框架,性能是这一堆页面级框......

  4. C# 调用FFmpeg处理音视频的示例

    FFmpeg 开源、跨平台、体积小、功能强大,提供了录制、转换以及流化音视频的完整解决方案。官网:https:/......

  5. 史上最详细的Python打包成exe文件教程

    打包成exe文件可以让python代码在没有python环境的条件下,依然能够运行,实在是码农们写追女朋友表白、情人......

  6. python实现excel公式格式化的示例代码

    之前跟一些小伙伴有个讨论:大概就是很多跟数据打交道的朋友都面对过很复杂的excel公式,有时嵌套层数特别多,肉眼观看......

  7. PHP 非常实用下载远程图片

    /*** 下载远程图片* @param string $url 图片的绝对url* @param string $f......

  8. telnet 命令使用方法大全

    什么是Telnet?对于Telnet的认识,不同的人持有不同的观点,可以把Telnet当成一种通信协议,但是对于入侵......

  9. java Wrapper类基本用法详解

    在封装中有一种特殊的类,能够把基本的数据类型进行转换来方便实际的使用。我们在之前提到的一些数据类型,最明显的特征是所......

  10. python工具系列-弱口令工具

    python弱口令扫描工具-初始版本篇博客记录下基于python写的gui小工具,也是我学python以来自己动手写......