우리는 다양한 Java 응용 프로그램을 개발하기 위해 원격 Linux 상자를 공유하며, 우리는 ssh를 통해 VisualVM을 사용하여 as described here 응용 프로그램을 프로파일 링합니다. 프로세스/사용자간에 포트 번호를 할당/프로비저닝 할 필요없이 Java 프로세스에서 JMX/프로파일 링을 사용할 수있는 방법이 있습니까? 프로파일 링을 활성화하기 위해 (고유 한) 포트 번호를 지정하는지 항상 확인해야하는 것은 귀찮습니다. 원격으로 VisualVM을 사용하려면 jmxremote 포트를 설정하지 않아도됩니까?
이 모든보다 구체적인 만들려면 : 포트가 분명히 작동하지 않는 하드 코딩과 충돌합니다exec java -Dcom.sun.management.jmxremote.port=3000 ...
우리는 당신이 프로세스를 실행할 때마다 항상 고유 한 포트를 지정 요구할 수 있지만, 이것은 tedious--입니다 - 당신은 다른 프로세스와 충돌하지 않는 당신의 포트를 확인해야하고 다른 사용자와 충돌하지 않는 :
exec java -Dcom.sun.management.jmxremote.port=$1 ...
는 현재 우리가 사용
exec java -Dcom.sun.management.jmxremote.port=$(($RANDOM + 2000)) ...
하지만 우리는 여전히 점령 된 포트 번호에 때때로 충돌합니다.
더 복잡한 스크립트를 계속 사용할 수 있습니다 (예 : 점령 포트 번호에 대해 netstat
을 쿼리하고 인종이 없기를 바랄 수 있음).하지만 더 나은 방법이 있는지/우리가 잘못하고 있는지 궁금해합니다.
Java 응용 프로그램에서 서버를 시작하지 않으면 문제가 한 번만 아래로 푸시됩니까? 포트 찾기가 더 강력해질 수 있습니다 (하나 이상의 포트를 시도 할 수 있고 TOCTTOU 레이스가 없을 수도 있기 때문에). 그러나이 작업을 우리가 작업하고있는 모든 프로젝트에 추가하지 않아도됩니다. . 어쨌든이 문제를 해결할 수있는 무언가가 있기를 바랍니다. – Yang