2017-03-14 3 views
1

나는 서비스와 장기 실행 자바 프로세스 사이의 통신 계층을 관리하기 위해 노드를 사용하고있다. 이 Java 프로세스는 다음을 사용하여 실행되는 jar입니다. ChildProcess.spawn()노드의 max_old_space_size가 하위 프로세스의 메모리 제한에 영향을 줍니까?

stdio, close, stderr 리스너를 설정하여 하위 프로세스의 진행 상태를 모니터링하고 전체 출력을 저장합니다. 나는 자식 프로세스가 자신의 메모리 공간 (독립 실행 형 프로세스)에서 자체 메모리 제한으로 실행될 것으로 예상했다.

그러나 테스트를 통해 노드 프로세스의 max_old_space_size을 늘릴 때 메모리 문제를보기 전에 프로세스가 상당히 오래 실행됩니다. 자바 프로세스의 실행을 통해 할당 된 메모리가 상위 프로세스의 최대 할당에 대해 계산되는 것처럼 보입니다. 이 경우인가요?

답변

3

대답은 '아니오'입니다. 이러한 메모리 제한을 전달할 수있는 유일한 시간은 fork()을 통해 노드 프로세스를 생성하는 경우이며 execArgv 옵션의 기본값은 process.execArgv (현재 프로세스의 V8 플래그 포함)입니다. 또는 이러한 프로세스에서 하위 프로세스를 생성하는 경우 (예 : 자바 자체의 리소스 제한 플래그 또는 제한된 리소스로 실제 자식 프로세스를 생성하는 명령을 통해) 메모리 사용을 명시 적으로 제한합니다. 노드는 사용자를 대신하여 ulimit 또는 다른 명령을 암시 적으로 실행하지 않습니다.

+0

'이 필요합니다 ('child_process') 포크 ("newProcess.js", { execArgv : [ '--max 된 공간 크기 = 2048'] });)' 수까지이 규모. 2GB에 newProcess.js의 기억? 감사. – jiajianrong