Node.js wget()到/tmp/wget products;EMFILE,打开的文件太多“;

Node.js wget()到/tmp/wget products;EMFILE,打开的文件太多“;,node.js,Node.js,我正在使用nodejs中的wget()和“node wget”监视IP列表 确切的命令是 wget( { url: szTargetIP, // as "http://10.139.238.167 dest: '/tmp/wget/', timeout: 2000 }, 在扫描完文件(as/tmp/wget/10.139.238.167)后,我立即执行了此操作 我总是记录“+++成功删除/tmp/wget/10.

我正在使用nodejs中的wget()和“node wget”监视IP列表

确切的命令是

    wget( {
        url:  szTargetIP,     // as "http://10.139.238.167
        dest: '/tmp/wget/',
        timeout: 2000    
    },
在扫描完文件(as/tmp/wget/10.139.238.167)后,我立即执行了此操作

我总是记录“+++成功删除/tmp/wget/10.139.238.167”

不幸的是,在运行了一段时间我的app.js之后, 我收到“EMFILE,打开的文件太多”

目录“/tmp/wget”为空,但。。。“lsof | grep wget”显示

有什么想法吗

*完整代码*

wget( {
        url:  szTargetIP,  
        dest: '/tmp/wget/',
        timeout: 2000       
    },
    function (error, response, body) {
        szNow = genTimeStamp() ; // get timestamp
        if (error) {
            console.log('--- wget() error:');
        } else {
            console.log('+++ wget() ok');
        } ; // no error = wget() ok
    }
) ; // wget()

var szIPfn = '/tmp/wget/' + iWget_IP ; 
fs.unlink( szIPfn, (err) => {

节点wget
使用
fs.createWriteStream()
函数,根据,该函数在
错误
完成
事件时自动关闭目标文件

节点wget
还使用
请求
模块,该模块从不发出
finish
事件,而是
complete

则wget命令的目标文件永远不会关闭。

只需添加如下内容:

var szIPfn = '/tmp/wget/' + iWget_IP ; 

fs.close(szIPfn, err => {
  if (err) thow err;

  fs.unlink( szIPfn, (err) => {         // delete file
    if (err) {
      if ( err.code === 'ENOENT' ) {
        mConsole( '--- file '+ szIPfn +' does not exist' ) ;
      } else {
        throw err; // fatal error : stop
      }
    }else{
      mConsole( '+++ successfully deleted ' + szIPfn ) ;
    }
  }); // unlink
}); // close

节点wget
使用
fs.createWriteStream()
函数,根据,该函数在
错误
完成
事件时自动关闭目标文件

节点wget
还使用
请求
模块,该模块从不发出
finish
事件,而是
complete

则wget命令的目标文件永远不会关闭。

只需添加如下内容:

var szIPfn = '/tmp/wget/' + iWget_IP ; 

fs.close(szIPfn, err => {
  if (err) thow err;

  fs.unlink( szIPfn, (err) => {         // delete file
    if (err) {
      if ( err.code === 'ENOENT' ) {
        mConsole( '--- file '+ szIPfn +' does not exist' ) ;
      } else {
        throw err; // fatal error : stop
      }
    }else{
      mConsole( '+++ successfully deleted ' + szIPfn ) ;
    }
  }); // unlink
}); // close

我认为您可能有
ulimit-a
问题(打开的文件描述符太多)。在这种情况下,某个地方出现内存泄漏。能否在wget之后添加更多关于如何保存数据的代码?您好:“ulimit-a”设置为默认值1024cant添加更多代码,就像节点wget所做的那样。您不是在
wget
命令中使用回调吗?你们如何处理接收到的数据?只是在主体中添加了回调,但我对接收到的数据不做任何处理,只是想知道IP是否应答,以进行监视…我认为你们可能有
ulimit-a
问题(打开的文件描述符太多)。在这种情况下,某个地方出现内存泄漏。能否在wget之后添加更多关于如何保存数据的代码?您好:“ulimit-a”设置为默认值1024cant添加更多代码,就像节点wget所做的那样。您不是在
wget
命令中使用回调吗?你们对接收到的数据做什么?只是在主体中添加了回调,但我对接收到的数据什么都不做,只是想知道IP是否应答,来监控…我要试试。。五分钟后!DUN32先生-fs.close()需要一个FD,我没有,因为我没有“打开”文件。unlink()得到一个“路径”。。。我有好的,我明白。。。但我想这就是问题所在。我曾经遇到过一次,那个错误,我添加到fork并编辑模块来处理关闭文件。无论如何,由于我不需要数据,我将尝试在所有wget()操作中使用相同的文件***:-)我将尝试它。。五分钟后!DUN32先生-fs.close()需要一个FD,我没有,因为我没有“打开”文件。unlink()得到一个“路径”。。。我有好的,我明白。。。但我想这就是问题所在。我曾经遇到过一个错误,我添加到fork并编辑模块来处理关闭文件。无论如何,由于我不需要数据,我将尝试对所有wget()操作使用相同的文件***:-)
var szIPfn = '/tmp/wget/' + iWget_IP ; 

fs.close(szIPfn, err => {
  if (err) thow err;

  fs.unlink( szIPfn, (err) => {         // delete file
    if (err) {
      if ( err.code === 'ENOENT' ) {
        mConsole( '--- file '+ szIPfn +' does not exist' ) ;
      } else {
        throw err; // fatal error : stop
      }
    }else{
      mConsole( '+++ successfully deleted ' + szIPfn ) ;
    }
  }); // unlink
}); // close