Node.js wget()到/tmp/wget products;EMFILE,打开的文件太多“;
我正在使用nodejs中的wget()和“node wget”监视IP列表 确切的命令是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.
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