2

Jrun サービスを開始しようとすると、次の 2 つのエラーで失敗するという問題が発生することがあります。

エラー JRun Naming Service がポート 2902 で開始できません java.net.BindException: ポートは別のサービスまたはプロセスによって使用されています: 2902

info このサーバー用に構成された JDBC データ ソースはありません (jrun-resources.xml を参照) エラー java.net.BindException: 別のサービスまたはプロセスによって使用されているポート: 8300

次に、マシンを再起動する必要がありますが、Jrun は問題なく起動します。これは非常に断続的です。おそらく、Jrun サービスを再起動する 10 回に 1 回発生します。

Windows サービスの再起動に 30 秒以上かかる場合、Windows の起動プロセスがシャットダウンされるという StackOverflow に関する別のリファレンスを見ました。多分それはここの問題ですか?実際、ログは、再起動コマンドが発行されてから約 37 秒後にこれらのエラーがスローされることを示しています。

WinServer 2008 の 64 ビット プラットフォームを使用しています。

ありがとう!

4

2 に答える 2

3

一部のサーバーで同様の問題が発生しています。残念ながら、netstat は実際のポートの競合をまったく示していませんでした。私は、ColdFusion の「累積的なホットフィックス」をサーバーに最近展開したことに関連しているのではないかと考えています。CF 8.0.1 エンタープライズのマルチサーバー エディションを使用し、各マシンに多数のインスタンスがあり、それぞれに独自の JVM と独自のポート セットがあります。各 CF インスタンスは独自の IIS Web サイトに接続され、独自の Windows サービスとして実行されます。

過去数週間以内に、32 ビット マシンと 64 ビット マシンで、起動時に同様の「使用中のポート」の例外が発生し始めました。すべて Windows Server 2003 を実行しています。以下:

  1. 各 CF インスタンスの jrun-jms.xml には、RMI トランスポート層のエントリがあります。<port>0</port>これは、JRun のドキュメントによると、「ランダムなポートを選択する」ことを意味します。インスタンスごとに (2600 ~ 2650 の範囲で) 非ランダムで個別のものを作成し、各インスタンスを再起動しました。状況は一時的に改善しましたが、おそらく偶然でした。
  2. 同じファイルで、後で TCPIP トランスポートのエントリの下で、すべてのインスタンスがデフォルトになった<port>2522</port>ので、それらを 2500 ~ 2550 の範囲でインスタンスごとに異なるポートに変更し、各インスタンスを再起動しました。それはまったく役に立たなかったようです。
  3. 2500 から 3000 の範囲のポートが他の目的に使用されている可能性があるかどうかを調査してみましたが、明確なものは何も見つかりませんでした。さらに、netstat は、私の選択が使用されていることを教えてくれませんでした。
  4. 1024 から 5000 までのポートを「動的ポート」の範囲として指定する Windows についてオンラインで見つけたので、jrun-jms.xml で設定したポート番号に 10000 を追加し、各インスタンスを再起動しました。それでも役に立ちませんでした。
  5. ポート番号に10000を追加して、jndi.propertiesのポートを変更してみました。残念ながら、これは、IIS へのすべての wsconfig 接続を一掃し、最初から再作成することを意味していました。-DWSConfig.PortScanStartPort=12900CF インスタンスを検出できるように、wsconfig_jvm.configも編集して java.args に追加する必要がありました。(デフォルトでは、ポート 2900-3000 のみをスキャンします。詳細については、 bpurcell.orgを参照してください。これは古い投稿ですが、まだ関連しています。)

私の推測では、Adobe (または MS Windows) が、そのコードの一部が「ランダムな」ポートを取得する方法を変更したということです。しかし、これまでのところ確実にわかっているのは、上記の手順で問題が解決したように見えるということだけです。

于 2009-10-09T05:27:28.987 に答える
1

サービスが実際に停止していることを確認しましたか?タスクマネージャは、jrun.exeのインスタンスを表示しないようにする必要があります。コマンドウィンドウを開いて実行することで、そのポートにバインドされているものを確認することもできます

netstat -a -b

これにより、開いているすべてのポートと、それらを使用しているプログラムが一覧表示されます。使用することもできます

netstat -a -o

これは上記と同じことを行いますが、プログラム名の代わりにプロセスIDをリストします。次に、それらをタスクマネージャーと相互参照できます。[表示]->[列の選択]に移動し、[PID]がオンになっていることを確認して、タスクマネージャーでPIDを表示できるようにする必要があります。私の推測では、jrunプロセスはタイムリーにシャットダウンされていません。

于 2009-10-07T22:06:26.270 に答える