Node.js Log4js需要几个小时来编写日志文件

Node.js Log4js需要几个小时来编写日志文件,node.js,performance,logging,log4js-node,Node.js,Performance,Logging,Log4js Node,我在代码中使用log4js来记录结果和错误。在最终控制台输出之前,程序运行了大约2,5个小时,之后需要几个小时来完成日志文件的编写。日志现在已经写了6个小时(因为算法本身已经完成),文件大小是100mb。 日志大约为150万行(完成后) 日志写得这么慢是正常的吗?在使用log4js时,是否有我可以检查的“标准”错误 如果你想知道:该程序运行在一个带有8gb RAM和SSD驱动器的Intel i5上,所以我想硬件不应该是问题所在 我不确定我还能给你提供什么其他信息,如果你需要知道什么,请提前询问。

我在代码中使用log4js来记录结果和错误。在最终控制台输出之前,程序运行了大约2,5个小时,之后需要几个小时来完成日志文件的编写。日志现在已经写了6个小时(因为算法本身已经完成),文件大小是100mb。 日志大约为150万行(完成后)

日志写得这么慢是正常的吗?在使用log4js时,是否有我可以检查的“标准”错误

如果你想知道:该程序运行在一个带有8gb RAM和SSD驱动器的Intel i5上,所以我想硬件不应该是问题所在


我不确定我还能给你提供什么其他信息,如果你需要知道什么,请提前询问。

Dropbox听起来是个不错的候选人。任何反病毒软件也可能会干扰

首先,我将通过为PC上的各种可用配置创建一个迷你log4js来确认您的系统的功能,然后将其与您的应用程序性能进行比较

var Benchmark=require('Benchmark');
var log4js=require('log4js');
log4js.clearAppenders();
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('NUL'),'nulnulnul');
var lognul=log4js.getLogger('nulnulnul');
log4js.addAppender(log4js.appenders.file('c:/your_dropbox/test.log'),'normallog');
var lognorm=log4js.getLogger('normallog');
log4js.addAppender(log4js.appenders.file('c:/tmp/test.log'),'nodropbox');
var lognodr=log4js.getLogger('nodropbox');
log4js.addAppender(log4js.appenders.file('c:/virus exception/test.log'),'nodropvir');
var lognodv=log4js.getLogger('nodropvir');
var-suite=新的Benchmark.suite;
//添加测试
suite.add('Log#Nul',function(){
lognul.info(“一些冗长的nulnulnul信息消息”);
})
.add('Log#normal',function(){
lognorm.info(“一些冗长的normallog信息消息”);
})
.add('Log#NoDropbox',function(){
lognodr.info(“一些冗长的nodropbox信息消息”);
})
.add('Log#NoVirusOrDropbox',function(){
lognodv.info(“一些冗长的nodropvir信息消息”);
})
//添加侦听器
.on('循环',功能(事件){
log(字符串(event.target));
})
.on('complete',function(){
console.log('faster is'+this.filter('faster').pull('name'));
})
//异步运行
.run({'async':false});
如果Dropbox或病毒软件不是问题所在,那么有两个工具可以帮助您在进程运行时查看系统的运行情况

-总体任务管理器/性能查看器

为您提供系统的总体视图,以便您可以查看哪些进程正在执行哪些操作。您还可以深入到特定流程(右键单击/properties)

-进程的事件探查器

Process Monitor就像一个日志文件,记录任何进程进行的所有系统调用。
您可以向下过滤到特定的进程或调用,这样您就可以监视Dropbox和Node.js进程,并查看它们在Dropbox工作时对相关文件的访问是否是交错的。

不,可能不会花那么长时间。大多数SSD应能每秒写入超过100MB的数据。什么操作系统?操作系统还在做什么?您的日志语句是否运行复杂的代码?你能看到在特定的日志行之间有很大的延迟吗?这是操作系统的Win7(64位)。后台没有什么特别的运行,日志行只写信息,没有自己的代码。日志终于在一夜之间完成了。它现在的大小为181mb,包含13.65亿个内存。线。我唯一想到的是,我将日志文件保存在云中(本地Dropbox文件),也许Dropbox的同步在某种程度上破坏了我的性能?Dropbox肯定是我首先要看的地方。。。我将在回答中加入一些步骤。谢谢。今晚我将使用本地日志文件重试,并在明天早上发布结果。我可以问您,您的程序如何在node中运行2.5小时吗?我正在开发一个编译到js,编译到c语言的测试版。语法非常接近js,所以翻译非常简单。当编译成c时,我得到了7倍的性能,所以从理论上讲,您的代码可以在20分钟而不是2.5小时内运行。检查:如果你认为它有用,请联系我。我已将日志文件重新定位到我的桌面上,但它仍然写得很慢。我编写了一个小的benchmarktest,它记录了一个数组的100.000行,其中包含随机整数(使用log4js)。这最多花了15秒。我已经运行了Process Explorer,它告诉我,node.js当前占用了我大约25%的CPU,其余部分或多或少都处于空闲状态。这符合我的理解,即节点运行在单个内核上(无需编程不同的线程)。但是,我编写的迷你测试也应该只使用一个内核,而且速度要快得多。那一定是我的代码有问题吧?听起来好像是你的代码有问题。您可能需要分析一个缩减运行,以查看它在日志记录过程中花费的大部分时间。上一次我尝试这个方法时,我找到了一个web代理,您可以使用Chrome开发工具与它连接。它从来没有很好地工作过。我认为这是非常好奇的节点检查器或节点代理。我在一个数组中保存了90%以上的日志行,并试图在程序结束时用log4js一次性写入这些行,但仍然需要相同的时间。也许是您的log4js设置?