はじめまして、坂本と申します。 開発しているアプリケーションで Node が不可思議な動きをしたので、もしご教示いただけることがあればと思い、投稿しました。
環境: AWS 上で構築したサーバーです。 (CPU) Intel(R) Xeon(R) CPU E5-2666 v3 @ 2.90GHz (OS) Ubuntu 16.04.2 LTS (Node) v6.11.0 現象: 以下のソース(1)で SIGSEGV エラーが発生し、プロセスが停止する。(2)、(3)、(4) では問題ない、(5) では SIGSEGV 発生。 実行オプションには --max_old_space_size=1024 --expose-gc がついており、process 自体は forever にて fork した child_process で動いています。 (*) catch 部分はすべて同じなので、 (2) 以降は省略しています。 この部分だけを単独実行しても再現はしない模様です。 (1) var when = Promise.resolve(); when = when.then(function() { return new Promise(function(rsl, rej) { rej('THROW ERROR'); // => SIGSEGV }); }); when['catch'](function(e){ console.log(e); }); (2) var when = Promise.resolve(); when = when.then(function() { return new Promise(function(rsl, rej) { rsl(); // => OK }); }); (3) var when = Promise.resolve(); when = when.then(function() { return new Promise(function(rsl, rej) { process.nextTick(rej); // => OK }); }); (4) var when = Promise.resolve(); when = when.then(function() { return new Promise(function(rsl, rej) { setImmediate(rej); // => OK }); }); (5) var when = Promise.resolve(); when = when.then(function() { return new Promise(function(rsl, rej) { throw 'THROW ERROR' // => SIGSEGV }); }); 同期的なエラーの throw に対して発生する、ということは現象的にわかっているのですが、 発生するようになる条件がわからない状況です。 よろしくお願いします。 -- --- このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。 このグループから退会し、グループからのメールの配信を停止するには nodejs_jp+unsubscr...@googlegroups.com にメールを送信してください。 その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。