Log4js занимает несколько часов, чтобы написать файл журнала

Я использую log4js в своем коде для регистрации результатов и ошибок. Программа запускается примерно за 2,5 часа до окончательного вывода на консоль, а затем требуется несколько часов для завершения записи файла журнала. Журнал записывается в течение 6 часов (поскольку сам алгоритм завершен), а размер файла составляет 100 МБ. Журнал будет около 1,5 миллиона строк (когда будет сделано).

Это нормально, что журнал записывается так медленно, как этот? Есть ли "стандартные" ошибки, которые можно сделать при использовании log4js, которые я мог проверить?

В случае, если вы хотите знать: программа работает на Intel i5 с 8 ГБ ОЗУ и дисководом SSD, так что аппаратное обеспечение не должно быть проблемой, я думаю.

Я не уверен, какую еще информацию я могу вам дать, просто спросите заранее, нужно ли вам что-то знать.

1 ответ

Dropbox звучит как хороший кандидат. Любое антивирусное программное обеспечение также может помешать.

Во-первых, я бы подтвердил, на что способна ваша система, создав эталонный тест mini 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     = new Benchmark.Suite;

// add tests
suite.add('Log#Nul', function() {
  lognul.info("Some lengthy nulnulnul info messages");
})
.add('Log#normal', function() {
  lognorm.info("Some lengthy normallog info messages");
})
.add('Log#NoDropbox', function() {
  lognodr.info("Some lengthy nodropbox info messages");
})
.add('Log#NoVirusOrDropbox', function() {
  lognodv.info("Some lengthy nodropvir info messages");
})
// add listeners
.on('cycle', function(event) {
  console.log(String(event.target));
})
.on('complete', function() {
  console.log('Fastest is ' + this.filter('fastest').pluck('name'));
})
// run async
.run({ 'async': false });

Если проблема с Dropbox или Virus не является проблемой, есть два инструмента Windows Sysinternal, которые помогут вам увидеть, что происходит в вашей системе во время работы вашего процесса.

Process Explorer - диспетчер общих задач / средство просмотра производительности

Дает вам общее представление о вашей системе, чтобы вы могли видеть, какие процессы что делают. Вы также можете углубиться в конкретные процессы (щелчок правой кнопкой мыши / свойства)

Process Monitor - Профилировщик событий для процессов.

Монитор процессов похож на файл журнала всех системных вызовов, которые делает любой процесс. Вы можете фильтровать до определенных процессов или вызовов, чтобы в вашем случае вы могли отслеживать Dropbox и ваш процесс Node.js и видеть, чередуется ли их доступ к рассматриваемому файлу, пока Dropbox выполняет свою работу.

Другие вопросы по тегам