ちょっとまだ不明点が多いのでなんともなのですが、いきなりPromiseをrejectした(例外を投げた)時のタイミングで、SIGSEGVが起きるという話ですね。 一旦 ben が見てくれているようなので、そのままフォローしていただいたほうが早そうですね。
*https://github.com/nodejs/node/issues/13782* 2017年6月19日月曜日 16時11分56秒 UTC+9 Yoshitaka Sakamoto: > > はじめまして、坂本と申します。 > 開発しているアプリケーションで 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 にアクセスしてください。