2017-05-16 1 views
0

이 코드가 작동합니다. 그러나 무한 루프를 주석 처리하지 않으면 결과가 없습니다. 2G에 대한 메모리를 줄이면 오류로 중지됩니다.간단한 스트레스 테스트를 할 때 nodejs에서 Firebird가 발생했습니다. 치명적인 오류가 발생했습니다 : 할당에 실패했습니다 - 메모리가 부족하여 JavaScript가 쌓여 있습니다.

FATAL ERROR : CALL_AND_RETRY_LAST 할당 실패 - 메모리 내가 잘못 뭐하는 거지

중 자바 스크립트 힙?

var Firebird = require('firebirdsql'); // or require('node-firebird'); 

var options = {}; 

options.host = '127.0.0.1'; 
options.port = 3050; 
options.database = 'D:\\test\\test.FDB'; 
// ... 

Firebird.attach(options, function(err, db) { 

    if (err) 
     throw err; 

// while (1) { // endless loop BEGIN 
    db.query('SELECT first 1000 a.* FROM EVENTS a ORDER BY a.DATETIME', function(err, result) { 
     if (err) throw err; 

       for(r of result) { 
        console.log(r.datetime, ""+r.event_text); 
        // console.log(r.DATETIME, ""+r.EVENT_TEXT); // for require('node-firebird'); 
       }; 
     // IMPORTANT: close the connection 
     db.detach(); 
    }); 

// } // endless loop END 

}); 

나는이 그렇게 중요하지 않다 생각하지만, 나는 while 루프의 10

+0

저는 결과 세트를 하나씩 인쇄하려고합니다. – TadejP

+0

루프 안에서 DETACH를 수행합니다. 데이터베이스에서 분리 한 후 누가 데이터베이스 작업을 계획합니까? 아마도 쿼리 커서 (result?)를 닫고 트랜잭션을 COMMIT해야하지만 마지막 쿼리를 수행 할 때까지는 데이터베이스 연결을 분리하지 않아야합니다 –

답변

1

사용 기능 setInterval을 대신 창에 노드의 V6.3.1을 사용하고 그것을 종료 할 당신 원인 던져 사용하지 않는 프로그램.

Firebird.attach(options, function(err, db) { 

    setInterval(
     function() { 
      db.query('SELECT first 1000 a.* FROM EVENTS a ORDER BY a.DATETIME', function(err, result) { 
       if (err) { 
        console.log("Error"); 
       } 
       else { 
        for(r of result) { 
         console.log(r.datetime, ""+r.event_text); 
        }; 
       } 
     // IMPORTANT: close the connection 
     //db.detach(); 
      }); 

     }, 1); 
}); 
관련 문제