无法在 ec2 上启动 glassfish - 无法打开端口

无法在 ec2 上启动 glassfish - 无法打开端口

我正在尝试在基于 EBS 的 Ubuntu 10.04 64 位 AMI 上启动 glassfish。我在非 ec2 服务器上使用 glassfish 没有任何问题,但在 ec2 上我收到此消息:

$ sudo -u glassfish bin/asadmin 启动域 domain1
已经有一个进程正在使用管理端口 4848 - 它可能是 GlassFish 服务器的另一个实例。
命令 start-domain 失败。

我知道 ec2 要求使用 ec2-authorize 修改防火墙规则,以允许外部流量通过防火墙,就像我必须这样做才能使 ssh 正常工作一样。这仍然无法解释端口错误,而我所做的只是启动 glassfish,以便我可以尝试

$ wget 本地主机:8080
并确保它能正常工作。

这非常令人沮丧,我真的很感激任何帮助。

谢谢。

最后更新:
如果您来这里是为了寻找答案,那我深表歉意。我一直不知道问题出在哪里。我创建了另一个新实例,安装了同样的东西,Glassfish 运行正常。显然在安装过程中出现了问题,但我不知道是什么。我想这仍然是个谜。


更新:这是我从 netstat 获得的信息:

# netstat -nuptl
活动互联网连接(仅限服务器)
Proto Recv-Q Send-Q 本地地址 外部地址 状态 PID/程序名称
tcp 0 0 0.0.0.0:22 0.0.0.0:* 监听 462/sshd        
tcp6 0 0 :::22 :::* 侦听 462/sshd        
udp 0 0 0.0.0.0:5353 0.0.0.0:* 483/avahi 守护进程:r
udp 0 0 0.0.0.0:1194 0.0.0.0:* 589/openvpn     
udp 0 0 0.0.0.0:37940 0.0.0.0:* 483/avahi 守护进程:r
udp 0 0 0.0.0.0:68 0.0.0.0:* 377/dhclient3   



更新:还有一件事...我知道“net.ipv6.bindv6only”内核选项可能会导致 Java 网络出现问题,因此我确实设置了这个:

# sysctl -w net.ipv6.bindv6only=0



更新:我还验证了它与端口号 (4848) 完全无关。如您在此处所见,当我将 domain.xml 中的 admin-listener 端口更改为 4949 时,我收到了类似的消息:

# sudo -u glassfish bin/asadmin 启动域 domain1
已经有一个进程正在使用管理端口 4949 - 它可能是 GlassFish 服务器的另一个实例。
命令 start-domain 失败。



更新:
以下是 /etc/hosts 的内容:

127.0.0.1 本地主机

# 对于支持 IPv6 的主机,以下几行是理想的
::1 ip6-本地主机 ip6-环回
fe00::0 ip6-本地网络
ff00::0 ip6-mcast前缀
ff02::1 ip6-所有节点
ff02::2 ip6-所有路由器
ff02::3 ip6-所有主机

我应该提到,我有另一个 Ubuntu Lucid 10.04 64 位切片,它没有托管在 ec2 上,并且以完全相同的方式进行设置,没有任何问题。

此外,server.log 也没有提供太多见解:

# cat ./server.log
2010 年 11 月 20 日上午 8:46:49 com.sun.enterprise.admin.launcher.GFLauncherLogger 信息
信息:JVM 调用命令行:
/usr/lib/jvm/java-6-sun-1.6.0.22/bin/java
-cp
/opt/glassfishv3/glassfish/modules/glassfish.jar
-XX:+解锁诊断虚拟机选项
-XX:最大永久大小=192m
-XX:新比例=2
-XX:+LogVM输出
-XX:日志文件=/opt/glassfishv3/glassfish/domains/domain1/logs/jvm.log
-Xmx512m
-客户
-javaagent:/opt/glassfishv3/glassfish/lib/monitor/btrace-agent.jar=unsafe=true,noServer=true
修改 Dosgi.shell.telnet.maxconn=1
-Djdbc.drivers=org.apache.derby.jdbc.ClientDriver
-Dfelix.fileinstall.dir=/opt/glassfishv3/glassfish/modules/autostart/
-Djavax.net.ssl.keyStore=/opt/glassfishv3/glassfish/domains/domain1/config/keystore.jks
-Dosgi.shell.telnet.端口=6666
-Djava.security.policy=/opt/glassfishv3/glassfish/domains/domain1/config/server.policy
-Dfelix.文件安装.轮询=5000
-Dcom.sun.aas.instanceRoot=/opt/glassfishv3/glassfish/domains/domain1
-Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory
-Dosgi.shell.telnet.ip=127.0.0.1
-Djava.endorsed.dirs=/opt/glassfishv3/glassfish/modules/endorsed:/opt/glassfishv3/glassfish/lib/endorsed
-Dcom.sun.aas.installRoot=/opt/glassfishv3/glassfish
-Djava.ext.dirs=/usr/lib/jvm/java-6-sun-1.6.0.22/lib/ext:/usr/lib/jvm/java-6-sun-1.6.0.22/jre/lib/ext:/opt/glassfishv3/glassfish/domains/domain1/lib/ext
-Dfelix.fileinstall.bundles.new.start=true
-Djavax.net.ssl.trustStore=/opt/glassfishv3/glassfish/domains/domain1/config/cacerts.jks
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as
-Djava.security.auth.login.config=/opt/glassfishv3/glassfish/domains/domain1/config/login.conf
-DANTLR_USE_DIRECT_CLASS_LOADING=真
-Dfelix.文件安装.调试=1
-Dorg.glassfish.web.rfc2109_cookie_names_enforced=false
-Djava.library.path=/opt/glassfishv3/glassfish/lib:/usr/lib/jvm/java-6-sun-1.6.0.22/jre/lib/amd64/server:/usr/lib/jvm/java-6-sun-1.6.0.22/jre/lib/amd64:/usr/lib/jvm/java-6-sun-1.6.0.22/lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
com.sun.enterprise.glassfish.bootstrap.ASMain
-域名
域1
-asadmin 参数
起始域,,,域1
-实例名称
服务器
-详细
错误的
-调试
错误的
-asadmin-类路径
/opt/glassfishv3/glassfish/modules/admin-cli.jar
-asadmin-类名
com.sun.enterprise.admin.cli.AsadminMain
-升级
错误的
-域目录
/opt/glassfishv3/glassfish/域/domain1
读取标准输入
真的

答案1

你是对的 - 防火墙与开放(假定的 TCP?)端口无关。

网络状态是你的朋友。类似的东西netstat -nupt -l会告诉你哪些进程正在监听哪些端口。

让我们知道该命令的输出,以及它是否有助于为您指明正确的方向。

答案2

我不知道为什么会出现你的 hosts 文件,因为它们彼此之间没有任何关系。

在我看来(根据您的修订),这并不是说当前有什么东西正在监听端口——而是您可能已配置两个东西来监听同一个 Glassfish 实例中的同一个端口。因此,如果您启动 Glassfish 并尝试在每个端口上启动侦听器,它将失败,并因此关闭先前启动的服务。因此,当您在之前和之后使用 netstat 时,它会正确报告当前没有任何东西在监听端口。

使用 检查每个侦听器是否位于不同的端口上asadmin,我敢打赌您会发现端口号被使用了两次。或者可能只是初始化导致两个实例同时启动,这将导致相同的行为。您可以尝试在不同的端口上配置一个全新的域,看看是否遇到类似的问题?

祝你好运!

更新:尝试使用以下方法获取所有听众:

asadmin get server | grep -i listener

答案3

同样的问题。这与 /etc/hosts 有关,我执行了 cat /etc/hostname 并将其添加到 127.0.0.1

答案4

最近,我发现将服务器启动到 VPC 需要进行相当多的额外配置(一次性配置)。关键线索如下:

 nslookup `hostname`

应该可以工作。如果不起作用,那很可能就是原因。

您可以:1)在 EC2-classic 中启动服务器 2)配置您的 VPC/主机以便能够成功运行上述命令。

希望有所帮助。

相关内容