eclipse - Amazon EC2- Tomcat 远程调试问题

标签 eclipse tomcat amazon-ec2

我在 Amazon Linux EC2 实例上运行了 Tomcat 8。我通过 ./catalina.sh jpda start

在 Debug模式下启动了 Tomcat

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

我正在尝试从 Mac El Capitan 上的 Eclipse Mars 4.5.1 远程调试它。但它一直给我错误 无法连接到远程虚拟机。连接被拒绝。

有什么我想念的吗?我可以通过什么方式对此进行更多调试?

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

添加更多信息。不知道有没有用。

运行命令: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不同。这是预期的吗?

最佳答案

我遇到了完全相同的问题。原因是 Tomcat 仅在本地主机上监听端口 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 实例私有(private) IP,并将 {port} 替换为您计划用于远程调试的端口号。我不知道 EC2 公共(public) IP 是否有效。懒得去尝试。

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

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

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

    catalina.sh jpda start
    

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

关于eclipse - Amazon EC2- Tomcat 远程调试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321940/

相关文章:

java - 使用 Eclipse Helios 进行 Web 项目

eclipse - 更改gradle项目目录,不能使用eclipse

eclipse - Spring Eclipse(STS)@RequestMapping View 为空,是否由于Maven项目?

maven - spring boot jsp 和可执行 jar 抛出/错误

amazon-web-services - kubernetes 没有为 ingress-nginx Controller 创建 ELB

eclipse - Rational Clearcase 客户端与 Eclipse 集成

java - Java servlet 类需要什么 Action 变量?

java - Maven、Tomcat、java.lang.ArrayIndexOutOfBoundsException : 10961

tomcat - 如何安装 Tomcat6 管理器应用程序

node.js - 使用 Websocket 设置 AWS ElasticBeanstalk