zoukankan      html  css  js  c++  java
  • node.js Error: connect EMFILE 或者 getaddrinfo ENOTFOUND

    Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo'

    Error: connect EMFILE

    本人在中心服上向800多个ip上发请求,发两次就不行了出现如上报错。

    原因是文件句柄不够用了,修改  ulimit 即可,步骤如下:

    1.vim /etc/security/limits.conf

    2.添加两行内容: 
    * soft nofile 65536 
    * hard nofile 65536

    3.退出当前终端,再进  ulimit -a 查看。

    虽然显示对了,经过node.js测试仍报错,怀疑没立即生效,指令: grep "Max open files" /proc/39629/limits   显示还是1024,说明没生效。

    解决办法:转自  https://blog.csdn.net/shootyou/article/details/6579139

    主要是因为linux在文件句柄的数目上有两个级别的限制。一个是系统级别的总数限制,一个是针对用户的限制。

    默认情况下每个用户所能使用的句柄数是1024。一般情况下1024也够用了,但是在大容量的系统上,特别是会频繁使用网络通信和文件IO的系统上,1024很快就被耗光了。所以首先我们要调整这个值。修改方法如下:

    1. ulimit -a 查看当前用户的文件句柄限制
    2. 用户级别的句柄数限制修改。
    修改 /etc/security/limits.conf 增加下面的代码:
    用户名(或者用*表示所有用户) soft nofile 65535
    用户名 hard nofile 65535
    有两种限制,一种是soft软限制,在数目超过软限制的时候系统会给出warning警告,但是达到hard硬限制的时候系统将拒绝或者异常了。
    修改之后可能需要重启shell生效。
    3. 系统级别的句柄数限制修改。
    sysctl -w fs.file-max 65536
    或者
    echo "65536" > /proc/sys/fs/file-max
    两者作用是相同的,前者改内核参数,后者直接作用于内核参数在虚拟文件系统(procfs, psuedo file system)上对应的文件而已。
    可以用下面的命令查看新的限制
    sysctl -a | grep fs.file-max
    或者
    cat /proc/sys/fs/file-max
    修改内核参数
    /etc/sysctl.conf
    echo "fs.file-max=65536" >> /etc/sysctl.conf
    sysctl -p
    查看系统总限制 命令:cat /proc/sys/fs/file-max
    查看整个系统目前使用的文件句柄数量命令:cat /proc/sys/fs/file-nr
    查看某个进程开了哪些句柄 :lsof -p pid
    某个进程开了几个句柄 :lsof -p pid |wc -l
    也可以看到某个目录 /文件被什么进程占用了,显示已打开该目录或文件的所有进程信息 :lsof path/filename

  • 相关阅读:
    django模型中的抽象类(abstract)
    http,tcp,udp的报文格式
    关于HTTP请求GET和POST的区别
    SQL语言分为四类,每类分别是?各包括什么?
    Python中为什么可以通过bin(n & 0xffffffff)来获得负数的补码?
    python中sorted和sorted 、reversed和reverse的使用。
    Django Cannot assign "A1": "B1" must be a "C1" instance. 错误信息
    python反转链表和成对反转
    Python单例模式的四种方法
    python的列表list和集合set操作
  • 原文地址:https://www.cnblogs.com/workharder/p/10372472.html
Copyright © 2011-2022 走看看