我正在尝试在基于 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/主机以便能够成功运行上述命令。
希望有所帮助。