ちょっとまだ不明点が多いのでなんともなのですが、いきなり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 にアクセスしてください。

メールによる返信