首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Amazon 2- Tomcat远程调试问题

问Amazon 2- Tomcat远程调试问题
EN

Stack Overflow用户
提问于 2016-02-10 17:27:24
回答 2查看 2.3K关注 0票数 5

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

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

我正在尝试从上的EclipseMars4.5.1远程调试这一功能。但它总是给我带来错误Failed to connect to remote VM. Connection refused.

我遗漏了什么吗?我能更多地调试它的方法是什么?

-编辑更多信息--

添加更多的信息。我不知道这会不会有帮助。

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

代码语言:javascript
复制
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提供的只是:

代码语言:javascript
复制
tcp        0      0 127.0.0.1:8000              0.0.0.0:*                   LISTEN 

还有一件事我注意到了。服务器信息下Tomcat管理器中的IP不同于实际的公共IP。这是意料之中吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-25 13:28:47

我也有同样的问题。原因是Tomcat只在本地主机上监听端口8000。为了让Tomcat去听外面的世界,我们需要告诉它外部世界的IP。由于Tomcat默认开始使用用户“tomcat”,因此该地址应该位于catalina.sh期望的位置。这就是我最终解决这个问题的方法:

  1. 导航到Security,并为将用于远程调试的端口添加自定义TCP规则。如果可能的话,将源IP限制在您使用的网络中。我的家庭ADSL有一个静态IP,我只允许自己访问远程调试端口。
  2. 在同一个文件夹中创建一个'setenv.sh‘文件和'catalina.sh',通常在’/usr/share/tomcat/bin/‘下面。
  3. 只添加一行: 导出JPDA_ADDRESS={主机私有IP}:{port} 将{host private IP}替换为EC2实例私有IP,将{port}替换为您计划用于远程调试的端口号。我不知道EC2的公共IP是否有效。没有费心去尝试。
  4. 必要时纠正所有者和组(例如tomcat:tomcat): sudo chown猫:tomcat setenv.sh
  5. 启用执行位 sudo chmod a+x setenv.sh
  6. 启动或重新启动Tomcat catalina.sh jpda启动

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

票数 7
EN

Stack Overflow用户

发布于 2016-02-18 19:56:48

调试器只侦听本地主机接口,它严格地是VM本地的。你可以做两件事来解决这个问题,

  1. 在tomcat上设置JPDA以侦听外部IP接口,将JPDA_ADDRESS参数设置为:8000。这很危险,因为任何人现在都可以连接到调试器。
  2. 使用SSH隧道设置从MAC到远程实例的安全连接。通过mac做一个ssh命令: ssh -N用户名@ip -L 8000/localhost/8000,那么您应该能够使用localhost:8000作为eclipse中的连接地址,将运行在MAC上的eclipse实例与tomcat连接起来。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35321940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档