2016-10-27 2 views
0

jstatd을 RMI 레지스트리의 특정 포트에서 시작하려면이 경우 -p 매개 변수를 전달하면됩니다.jstatd의 두 번째 열린 포트를 강제 또는 예측하는 방법은 무엇입니까?

하지만 문제는 방화벽 규칙을 작성하거나 JVisualVM을 사용하여 Docker 컨테이너에서 실행중인 jstatd 원격지에 연결하는 데 문제가되는 두 번째 임의의 포트 (Java의 "익명 포트")를 여는 것입니다.

jstatd source을 보면 UnicastRemoteObject.exportObject(remoteHost, 0)이 호출되어 임의로 보이는 새로운 "익명 포트"가 열리는 것을 확인할 수 있습니다.

마지막 포트를 고정 된 포트로 강제로 전환 할 수 있습니까? 아니면 어느 포트를 선택할지 예측할 수 있습니까?

+0

가능한 복제본 [RMI가 특정 포트 집합만을 사용하도록하려면 어떻게합니까?] (http://stackoverflow.com/questions/56687/how-do-i-ensure-that-rmi-uses-only) -a-specific-set-of-ports) – jchampemont

+0

실제로 소켓 팩토리 충돌이 발생하지 않는 한 새로 내 보낸 객체가 레지스트리 포트와 같이 이전에 사용 된 포트를 다시 사용하게됩니다. 증거가 있니? 아니면 단지이 오독에 기초한이 질문입니까? – EJP

+0

@EJP : 나는 당신의 코멘트를 정말로 이해하지 못한다. 나의 질문은'jstatd'를 시작하면 다른 포트가 열리고 (RMI 레지스트리 포트도) 포트를 방화벽 규칙에 넣으면 JVisualVM (예를 들어)이 원격 서버에 액세스 할 수 없습니다. –

답변

0

익명 포트를 사용하여 열 수있는 구체적인 포트를 쉽게 예측할 수있는 방법을 찾지 못했습니다.

하지만 3 개 포트를 강제로 "jakestatd"라는 jstatd의 재 작성 (마지막에, 나는 jstatd 것을 발견하기 때문에 실제로 3 개 포트를 엽니 아니라이 내가 처음 생각했던) jstatd 사용하는 것을 발견했다. 나는 그 포트를 제어하는 ​​데 필요한 때문에 나를 위해 충분하지으로

, 정말 지금은 (ejstatd의 폴더 안에)를 사용하여 도스 포트를 제어 할 수 있습니다,이 정확한 질문 (뿐만 아니라 다른 사람을) 대답 ejstatd를 썼다 :

mvn exec:java -Dexec.args="-pr 2222 -ph 2223 -pv 2224" 

여기에 열립니다 3 개 포트 2222, 22232224 될 것이며, RMI 레지스트리 포트 2222에서 사용할 수 있습니다.

관련 문제