jpda をオンにして tomcat を起動した後、私の会社では、Eclipse で多数の Web アプリケーションをリモート デバッグできます。さまざまな理由から、会社のファイアウォールの外側から同じ Web アプリケーションを開発してリモート デバッグする必要があり、そのサーバーにはポート 22 の ssh 経由でしかアクセスできません。
最も必要なポート (svn、nexus、tomcat 自体、サーバーから、またはサーバー経由) を localhost にトンネリングし、これらのサービスは正常に動作しますが、Eclipse デバッガーを起動できません。2 回目の試行から、「パケット XXX の待機中に接続がタイムアウトしました」または「接続が拒否されました」というメッセージが表示されます。サーバーの nmap で確認すると、最初の接続試行の前に開いているポートが報告され、その後は閉じられます。catalina.out に興味深い出力ログがありません
トンネルを開始するために使用するコマンドは次のとおりです。
ssh -L 8000:localhost:8000 user@mycompany.com
iptables は、テストのためにサーバーとローカル マシンの両方で一時的に停止されました。
何か不足していますか?他のポートを localhost に転送する必要がありますか? それとも何らかの形で名前解決に関係していますか?
編集
Eclipse からの接続試行前にポートを開きます。
root@lnxulisse:/opt/apache-tomcat-6.0.32/bin# lsof -p 2147 -n |grep TCP
java 2147 root 4u IPv4 640850 0t0 TCP *:8000 (LISTEN)
java 2147 root 38u IPv6 640859 0t0 TCP *:http-alt (LISTEN)
java 2147 root 40u IPv6 640865 0t0 TCP *:https (LISTEN)
java 2147 root 46u IPv6 640908 0t0 TCP 127.0.0.1:18005 (LISTEN)
java 2147 root 48r IPv6 642625 0t0 TCP 172.24.0.82:48347->172.24.0.82:mysql (ESTABLISHED)
java 2147 root 181u IPv6 640891 0t0 TCP 172.24.0.82:60353->172.24.0.82:mysql (ESTABLISHED)
以降:
java 2147 root 4u IPv6 642769 0t0 TCP 172.24.0.82:48956->172.24.0.82:mysql (ESTABLISHED)
java 2147 root 5u IPv4 640851 0t0 TCP 127.0.0.1:8000->127.0.0.1:34193 (ESTABLISHED)
java 2147 root 38u IPv6 640859 0t0 TCP *:http-alt (LISTEN)
java 2147 root 40u IPv6 640865 0t0 TCP *:https (LISTEN)
java 2147 root 46u IPv6 640908 0t0 TCP 127.0.0.1:18005 (LISTEN)
java 2147 root 181u IPv6 640891 0t0 TCP 172.24.0.82:60353->172.24.0.82:mysql (ESTABLISHED)
返される正確な日食エラーは次のとおりです。
Exception occurred during launch
Failed to connect to remote JVM. Connection timed out.
Timeout occurred while waiting for packet 204.
(パケット番号は試行ごとに異なります)。
workspace/.metadata/.log
私は得る:
!ENTRY org.eclipse.osgi 2 0 2011-07-17 18:43:53.024
!MESSAGE While loading class "org.eclipse.core.net.proxy.IProxyService", thread "Thread[main,6,main]" timed out waiting (5000ms) for thread "Thread[Thread-6,5,main]" to finish starting bundle "org.eclipse.core.net_1.2.1.r35x_20090812-1200 [232]". To avoid deadlock, thread "Thread[main,6,main]" is proceeding but "org.eclipse.core.net.proxy.IProxyService" may not be fully initialized.
!STACK 0
org.osgi.framework.BundleException: State change in progress for bundle "reference:file:plugins/org.eclipse.core.net_1.2.1.r35x_20090812-1200.jar" by thread "Thread-6".
at org.eclipse.osgi.framework.internal.core.AbstractBundle.beginStateChange(AbstractBundle.java:1073)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:278)
[...]
!ENTRY org.eclipse.ui.ide 4 4 2011-07-17 18:43:53.028
!MESSAGE Proxy service could not be found.
eclipse は直接インターネット接続用に構成されています。
編集2
解決策はここにあると思います:
http://blog.cantremember.com/debugging-with-jconsole-jmx-ssh-tunnels/
しかし、彼の JNDI/RMI 設定と、それが私の構成にどの程度当てはまるかを理解するのに苦労しています。
編集3
これは、「 」<lan|local ip address>
の代わりに使用すると答えた人のための明確化です。<localhost>
- コンピューター A: 会社の私のワークステーション
- コンピューター B: 自宅の私のワークステーション
- コンピューター C: Tomcat を実行しているサーバー
B と C は、同じネットワーク インフラストラクチャ内の 2 つの異なるサブネットワークにあります。外部からの C のポート 22 への接続のみが許可されます (ネットワークの内部はわかりません)。
A は「外部」です (動的 IP アドレスを使用した DSL 接続)。
Debugging on C from B via ssh tunnel -> works
Debugging on C from A via ssh tunnel -> connection timed out while waiting for packet XXX