Amazon EC2- Tomcat远程调试问题

ris*_*shi 4 eclipse tomcat amazon-ec2

我有在Amazon Linux EC2实例上运行的Tomcat 8。我通过调试模式启动了Tomcat./catalina.sh jpda start

我认为服务器以调试模式启动,因为我可以看到以下行: Listening for transport dt_socket at address: 8000在日志的开头。我的安全组还为入站请求打开了8000端口。

我正在尝试从Mac El Capitan上的Eclipse Mars 4.5.1进行远程调试。但这总是给我错误Failed to connect to remote VM. Connection refused.

有什么我想念的吗?我可以进一步调试的方式是什么?

---编辑更多信息---

添加更多信息。我不知道这是否有帮助。

运行命令:netstat -an | grep 80给出以下输出:

tcp        0      0 127.0.0.1:8000              0.0.0.0:*                   LISTEN      
tcp        0      0 172.31.26.122:80            185.30.165.34:80            SYN_RECV    
tcp        0      0 127.0.0.1:3306              127.0.0.1:55080             ESTABLISHED 
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      
tcp        0      0 :::8009                     :::*                        LISTEN      
tcp        0      0 :::80                       :::*                        LISTEN      
tcp        0      0 ::ffff:127.0.0.1:55080      ::ffff:127.0.0.1:3306       ESTABLISHED 
udp        0      0 0.0.0.0:980                 0.0.0.0:*                               
udp        0      0 :::980                      :::*                                    
unix  2      [ ACC ]     SEQPACKET  LISTENING     8016   @/org/kernel/udev/udevd
unix  3      [ ]         DGRAM                    8025   
unix  3      [ ]         DGRAM                    8024   
Run Code Online (Sandbox Code Playgroud)

但是运行命令netstat -an | grep 8000只会给出:

tcp        0      0 127.0.0.1:8000              0.0.0.0:*                   LISTEN 
Run Code Online (Sandbox Code Playgroud)

我注意到了另一件事。Tomcat管理器中“服务器信息”下的IP与实际的公共IP不同。那是预期的吗?

som*_*cat 5

我有完全一样的问题。原因是Tomcat仅在localhost上侦听端口8000。为了让Tomcat听取外界的声音,我们需要告诉它外界IP。由于Tomcat默认开始使用用户“ tomcat”,因此该地址应位于catalina.sh所期望的位置。这是我最终解决的方法:

  1. 导航到“安全组”,然后为将用于远程调试的端口添加自定义TCP规则。如果可能,将源IP限制为您使用的网络的IP。我的家庭ADSL具有静态IP,并且我仅将远程调试端口限制为我自己访问。
  2. 在同一文件夹和“ catalina.sh”中创建一个“ setenv.sh”文件,通常在“ / usr / share / tomcat / bin /”下
  3. 仅添加一行:

    export JPDA_ADDRESS={host private IP}:{port}
    
    Run Code Online (Sandbox Code Playgroud)

    替换{host private IP}为您的EC2实例专用IP和{port}计划用于远程调试的端口号。我不知道EC2公共IP是否可以工作。没去尝试。

  4. 如有必要,更正所有者和组(例如,tomcat:tomcat):

    sudo chown tomcat:tomcat setenv.sh
    
    Run Code Online (Sandbox Code Playgroud)
  5. 启用执行位

    sudo chmod a+x setenv.sh
    
    Run Code Online (Sandbox Code Playgroud)
  6. 使用启动或重启Tomcat

    catalina.sh jpda start
    
    Run Code Online (Sandbox Code Playgroud)

关于EC2的私有和公共IP。是的,我使用'netstat'观察到了同样的事情。