2014-10-10 4 views
1

실행중인 Java 응용 프로그램이 있습니다. "개미 myapp". 이제이 애플리케이션이 스스로를 복제하고, 즉 새 프로세스에서 새로운 인스턴스를 시작하기를 원합니다.새 프로세스에서 Java 응용 프로그램 시작

나는 그것이 Processbuilder 나 Runtime.exec()와 함께 이루어져야한다는 것을 알고있다.

Processbuilder 또는 Runtime.exec ('ant myapp')를 호출하는 중이라면 새 JVM을 시작하고 별도의 프로세스에서 실행합니다. 이게 옳은 거니?

그러나 새 프로세스에서 동일한 JVM 내에서 응용 프로그램을 실행할 수 있다고 들었습니다. 어떻게해야합니까?

새 JVM이없는 경우 더 적은 메모리가 사용됩니다. 새로운 프로세스가 동일한 JVM에서 실행되는 경우 단점은 무엇입니까? 응용 프로그램의 서버에 많은 소켓 연결이 있습니다. 따라서 새로운 JVM을 만들지 않을 때 이것이 문제가 될 수 있습니까?

답변

0

ExecutorService을 살펴보십시오. 풀링하고 시간 제한을 설정할 수 있습니다.

소켓, 메모리, CPU에 관해서는 : 유한 리소스를 적절하게 사용하고 있는지 확인하기 위해 앱을 프로파일 링해야합니다. 이는 모든 Java 응용 프로그램에 해당됩니다. 추측하거나 여기 묻는 것으로 답을 알 수 없습니다. 모든 상황이 다릅니다. 알아야 할 유일한 방법은 프로파일 링을 통해 데이터를 얻는 것입니다.

+0

ExecutorService는 동일한 JVM에서 새 프로세스를 생성하기위한 것입니까? 그리고 그들은 새로운 프로세스로 운영 될 것입니까? 어떻게 프로파일 링을 할 수 있습니까? – machinery

+0

더 나은, 안전한 스레드로 생각하십시오. 아니요, OS에서 PID로 표시되지 않습니다. 단일 JVM 내부에서 실행됩니다. VisualVM 또는 dynaTrace (내 새로운 fave)와 같은 프로파일 링 도구로 프로파일 링하십시오. – duffymo

+0

감사합니다. Ubuntu를 실행하는 Amazon EC2 인스턴스에서 VisualVM 또는 dynaTrace를 설정하고 내 Windows 호스트에서 연결하도록 쉬운 단계별 자습서를 알고 있습니까? – machinery

관련 문제