2017-05-16 4 views
0

このコードは動作しています。しかし、無限ループのコメントを外すと結果はありません。 2Gのためのメモリを減らして終了すると、エラーで停止します。単純なストレステストでは、nodejsでFirebirdを実行しましたが、致命的なエラーが発生しました。割り当てに失敗しました - メモリが不足しているJavaScriptヒープ

FATAL ERROR:CALL_AND_RETRY_LASTの割り当てに失敗しました - 私が間違って何をやっているメモリ

のうちJavaScriptのヒープ?

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

あなたはループの中で掘り下げています - あなたはそれを切り離した後、あなたは誰がデータベースを使って作業する予定ですか?クエリカーソル(result?)を閉じてトランザクションをCOMMITする必要がありますが、LASTクエリを実行するまでデータベース接続から切り離すことはほとんどありません –

答えて

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); 
}); 
関連する問題