2017-03-14 4 views
1

私は、サービスと長時間実行されているJavaプロセスの間の通信レイヤーを管理するためにノードを使用しています。このJavaプロセスは、使用されているjarですChildProcess.spawn()ノードのmax_old_space_sizeは、子プロセスのメモリ制限に影響しますか?

stdio、close、stderrリスナーを設定して、子プロセスの進行状況を監視し、出力を保存します。私は、子プロセスが独自のメモリ空間で実行することを期待していました。それは、独自のメモリ制限(スタンドアロンプ​​ロセス)です。

しかし、テストを通して、ノードプロセスのmax_old_space_sizeを増やすと、メモリの問題が発生する前にプロセスがかなり長く実行されると判断しました。 Javaプロセスの実行によって割り当てられたメモリは、親プロセスの最大割り当てに対して数えられるようです。これは本当ですか?

答えて

3

答えはいいえです。これらのメモリ制限が渡される唯一の時間は、fork()(デフォルトではexecArgvオプション)のノードプロセスをprocess.execArgv(現在のプロセスのV8フラグを含む)にするか、このようなプロセスで子プロセスを生成する場合ですJavaのリソース制限フラグや、制限されたリソースを持つ実際の子プロセスを生成するコマンドを介して)明示的にメモリ使用を制限します。ノードは暗黙的にulimitまたは他のそのようなコマンドをあなたのために実行しません。

+0

'( 'child_process')必要フォーク( "newProcess.js"、{ execArgv:[ '--max-古い空間サイズ= 2048'] });)' このスケールアップでき2GBにnewProcess.jsのメモリ?ありがとう。 – jiajianrong

関連する問題