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

  • 相关阅读:
    k-匿名算法
    门控循环单元(GRU)与 LSTM 的区别
    计算机视觉之相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
    CMU-Multimodal SDK Version 1.1 (mmsdk)使用方法总结
    机器学习 – 练习题:一段1米长的绳子 随机切两刀 分成三段 求能够组合成一个三角形的概率
    pickle导入变量AttributeError的解决方案
    typing类型注解库
    灰度共生矩阵(Gray-level Co-occurrence Matrix,GLCM),矩阵的特征量
    几何不变矩--Hu矩
    对 GAN 的 value function 的理解
  • 原文地址:https://www.cnblogs.com/workharder/p/10372472.html
Copyright © 2011-2022 走看看