【问题标题】:Amazon EC2- Tomcat remote debugging issueAmazon EC2-Tomcat 远程调试问题
【发布时间】:2016-05-21 04:51:42
【问题描述】:

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

我认为服务器以调试模式启动,因为我可以看到日志开头的行: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   

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

tcp        0      0 127.0.0.1:8000              0.0.0.0:*                   LISTEN 

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

【问题讨论】:

  • 你能在 ec2 实例上运行它吗:telnet localhost 8000,你得到了什么?
  • @BMW 当我以调试模式启动服务器时,它说:正在尝试 127.0.0.1... 已连接到本地主机。转义字符是 '^]'。外部主机关闭连接。否则,如果正常盯着:尝试 127.0.0.1... telnet: 连接到地址 127.0.0.1: 连接被拒绝

标签: eclipse tomcat amazon-ec2


【解决方案1】:

我遇到了完全相同的问题。原因是 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}
    

    {host private IP} 替换为您的EC2 实例私有IP,将{port} 替换为您计划用于远程调试的端口号。我不知道 EC2 公共 IP 是否可以工作。懒得试了。

  4. 必要时正确的所有者和组(例如tomcat:tomcat):

    sudo chown tomcat:tomcat setenv.sh
    
  5. 启用执行位

    sudo chmod a+x setenv.sh
    
  6. 使用启动或重启 Tomcat

    catalina.sh jpda start
    

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

【讨论】:

    【解决方案2】:

    调试器仅在本地主机接口上侦听,该接口严格位于虚拟机本地。你可以做两件事来解决这个问题,

    1. 在tomcat上设置JPDA监听外部IP接口,设置JPDA_ADDRESS参数为:8000。这是有风险的,因为现在任何人都可以连接到调试器。
    2. 使用 SSH 隧道设置从您的 MAC 到远程实例的安全连接。从你的 mac 执行 ssh 命令:ssh -N username@ip -L 8000/localhost/8000,然后你应该能够使用 localhost:8000 作为连接地址将 MAC 上运行的 eclipse 实例与 tomcat JPDA 连接起来日食。

    【讨论】:

      猜你喜欢
      • 2014-02-24
      • 2013-11-27
      • 2015-08-11
      • 1970-01-01
      • 2014-02-06
      • 2012-09-12
      • 2012-12-25
      • 2013-02-13
      • 1970-01-01
      相关资源
      最近更新 更多