Node v6.11.0 における不思議な挙動

64 views
Skip to first unread message

Yoshitaka Sakamoto

unread,
Jun 19, 2017, 3:11:56 AM6/19/17
to Node.js 日本ユーザグループ
はじめまして、坂本と申します。
開発しているアプリケーションで 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 に対して発生する、ということは現象的にわかっているのですが、
発生するようになる条件がわからない状況です。
よろしくお願いします。

Yosuke FURUKAWA

unread,
Jun 19, 2017, 7:09:56 AM6/19/17
to Node.js 日本ユーザグループ
ちょっとまだ不明点が多いのでなんともなのですが、いきなりPromiseをrejectした(例外を投げた)時のタイミングで、SIGSEGVが起きるという話ですね。
一旦 ben が見てくれているようなので、そのままフォローしていただいたほうが早そうですね。




2017年6月19日月曜日 16時11分56秒 UTC+9 Yoshitaka Sakamoto:

Yoshitaka Sakamoto

unread,
Jun 19, 2017, 9:12:38 AM6/19/17
to Node.js 日本ユーザグループ
確認ありがとうございました。よく考えたら本家とここは繋がっているのですね、二重投稿してしまい、失礼しました。
なぜ setImmediate( ) をかませば改善するのか、の点に疑問を残しながらですが、ben さんのお陰であっという間に解決です!あとは自分でソースを読めばなんとかなりそうです。

2017年6月19日月曜日 20時09分56秒 UTC+9 Yosuke FURUKAWA:
Reply all
Reply to author
Forward
0 new messages