さまざまな Java アプリを開発するためのリモート Linux ボックスを共有し、ここで説明されているように、ssh 経由で VisualVM を使用してアプリをプロファイリングします。プロセス/ユーザー間でポート番号を割り当て/プロビジョニングする必要なく、Java プロセスで JMX/プロファイリングを有効にする方法はありますか? プロファイリングを有効にするためだけに (一意の) ポート番号を指定していることを常に確認する必要があるのは面倒です。
これをより具体的にするために、ポートのハードコーディングは明らかに機能せず、競合します。
exec java -Dcom.sun.management.jmxremote.port=3000 ...
プロセスを実行するたびに常に一意のポートを指定する必要がありますが、これは面倒です---ポートが他のプロセスと競合したり、他のユーザーと競合したりしないようにする必要があります。
exec java -Dcom.sun.management.jmxremote.port=$1 ...
現在、以下を使用しています。
exec java -Dcom.sun.management.jmxremote.port=$(( $RANDOM + 2000 )) ...
ただし、占有されているポート番号に出くわすことがあります。
より洗練されたスクリプト (占有されているポート番号を照会netstat
し、競合がないことを期待するなど) を続行できますが、より良い方法があるかどうか、または間違っているかどうか疑問に思っています。