我在 Amazon Linux EC2 实例上运行了 Tomcat 8。我通过 ./catalina.sh jpda start
我认为服务器以 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 预期的位置。这就是我最终解决它的方式:
- 导航到安全组并为您将用于远程调试的端口添加自定义 TCP 规则。如果可能,将源 IP 限制为您使用的网络的 IP。我家的 ADSL 有一个静态 IP,我只允许我自己访问远程调试端口。
- 在与“catalina.sh”相同的文件夹中创建一个“setenv.sh”文件,通常在“/usr/share/tomcat/bin/”下
只添加一行:
export JPDA_ADDRESS={host private IP}:{port}
将
{host private IP}
替换为您的 EC2 实例私有(private) IP,并将{port}
替换为您计划用于远程调试的端口号。我不知道 EC2 公共(public) IP 是否有效。懒得去尝试。必要时更正所有者和组(例如 tomcat:tomcat):
sudo chown tomcat:tomcat setenv.sh
启用执行位
sudo chmod a+x setenv.sh
启动或重新启动 Tomcat 使用
catalina.sh jpda start
关于 EC2 的私有(private)和公共(public) IP。是的,我使用“netstat”观察到同样的事情。
关于eclipse - Amazon EC2- Tomcat 远程调试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321940/