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

我试图在基于EBS的Ubuntu 10.04 64位AMI上启动glassfish。 我已经在non-ec2服务器上使用了glassfish,没有任何问题,但在ec2上我收到了以下消息:

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

我知道ec2要求使用ec2-authorize修改防火墙规则,让外面的stream量通过防火墙,就像我必须做的ssh工作。 这仍然不能解释端口错误,当我想要做的是启动玻璃鱼,所以我可以尝试

  $ wget localhost:8080 

并确保它的工作。

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

谢谢。

最终更新:
对不起,如果你来这里寻找答案。 我从来没有想过是什么原因造成的问题。 我创build了另一个新的实例,安装了相同的东西,Glassfish完美地工作。 在安装过程中,显然有些事情已经结束,但我不知道是什么。 我想这将是一个谜。

更新:这是我从netstat得到的:

 #netstat -nuptl
活动的Internet连接(仅限服务器)
原始Recv-Q发送-Q本地地址外部地址状态PID /程序名称
 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 462 / sshd        
 tcp6 0 0 ::: 22 ::: * LISTEN 462 / sshd        
 udp 0 0 0.0.0.0:5353 0.0.0.0:* 483 / avahi-daemon: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-daemon:r
 udp 0 0 0.0.0.0:68 0.0.0.0:377 / dhclient3   

更新:还有一件事…我知道“net.ipv6.bindv6only”内核选项可能会导致与javanetworking的问题,所以我没有设置:

 #sysctl -w net.ipv6.bindv6only = 0

更新:我也证实,它与端口号(4848)没有任何关系。 正如你在这里看到的,当我将domain.xml中的pipe理侦听器端口改为4949时,我收到了类似的信息:

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

更新:
这里是/ etc / hosts的内容:

 127.0.0.1 localhost

 #对于支持IPv6的主机,以下几行是可取的
 :: 1 ip6-localhost ip6-loopback
 fe00 :: 0 ip6-localnet
 ff00 :: 0 ip6-mcastprefix
 ff02 :: 1 ip6-allnodes
 ff02 :: 2 ip6-allrouters
 ff02 :: 3 ip6-allhosts

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

另外server.log也没有提供很多的见解:

 #cat ./server.log 
 Nov 20,2010 8:46:49 AM com.sun.enterprise.admin.launcher.GFLauncherLogger info
 INFO:JVM调用命令行:
 /usr/lib/jvm/java-6-sun-1.6.0.22/bin/java
 -cp
 /opt/glassfishv3/glassfish/modules/glassfish.jar
 -XX:+ UnlockDiagnosticVMOptions
 -XX:MaxPermSize参数=192米
 -XX:NewRatio = 2
 -XX:+ LogVMOutput
 -XX:日志文件= /select/ glassfishv3 /的glassfish /域/域1 /日志/ 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 = /select/ glassfishv3 /的glassfish /模块/自动启动/
 -Djavax.net.ssl.keyStore = /select/ glassfishv3 /的glassfish /域/域1 /configuration/ keystore.jks
 -Dosgi.shell.telnet.port = 6666
 -Djava.security.policy = /select/ glassfishv3 /的glassfish /域/域1 /configuration/的server.policy
 -Dfelix.fileinstall.poll = 5000
 -Dcom.sun.aas.instanceRoot = /select/ glassfishv3 /的glassfish /域/ 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 = /select/ glassfishv3 /的glassfish /模块/赞同:/select/ glassfishv3 /的glassfish / LIB /认可
 -Dcom.sun.aas.installRoot = /select/ glassfishv3 / glassfish的
 -Djava.ext.dirs = / usr / lib中/ JVM / JAVA -6-太阳1.6.0.22 / lib / ext目录:/usr/lib/jvm/java-6-sun-1.6.0.22/jre/lib/ext中:/ opt / glassfishv3 / GlassFish中/域/域1 / lib / ext目录
 -Dfelix.fileinstall.bundles.new.start =真
 -Djavax.net.ssl.trustStore = /select/ glassfishv3 /的glassfish /域/域1 /configuration/ cacerts.jks
 -Dcom.sun.enterprise.security.httpsOutboundKeyAlias =为s1as
 -Djava.security.auth.login.config = /select/ glassfishv3 /的glassfish /域/域1 /configuration/ login.conf的
 -DANTLR_USE_DIRECT_CLASS_LOADING =真
 -Dfelix.fileinstall.debug = 1
 -Dorg.glassfish.web.rfc2109_cookie_names_enforced = FALSE
 -Djava.library.path = /select/ glassfishv3 /的glassfish / lib中:/usr/lib/jvm/java-6-sun-1.6.0.22/jre/lib/amd64/server:/ usr / lib中/ JVM / Java的6,太阳1.6.0.22 / JRE / lib中/ AMD64:/usr/lib/jvm/java-6-sun-1.6.0.22/lib/amd64:在/ usr / JAVA /包装/ lib中/ AMD64:在/ usr / lib64下:/ lib64目录:/ lib目录:/ usr / lib目录
 com.sun.enterprise.glassfish.bootstrap.ASMain
 -domainName
 DOMAIN1
 -asadmin-ARGS
启动域,,, DOMAIN1
 -instancename
服务器
 -verbose
假
 -debug
假
 -asadmin-类path
 /opt/glassfishv3/glassfish/modules/admin-cli.jar
 -asadmin,类名
 com.sun.enterprise.admin.cli.AsadminMain
 -升级
假
 -domaindir
的/ opt / glassfishv3 /的glassfish /域/ domain1的
 - 读取,标准input
真正

你是对的 – 防火墙与开放(推测的TCP?)端口无关。

netstat是你的朋友。 类似于netstat -nupt -l东西会告诉你什么进程正在监听什么端口。

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

我不知道为什么你的主机文件被提出,因为这些文件没有任何关系。

这听起来对我来说(根据您的修订),它不是目前正在监听的端口 – 但你可能已经configuration了两件事情在同一个Glassfish实例中的同一端口上监听。 因此,如果您启动Glassfish并尝试在每个端口上启动侦听器,则会失败,从而closures以前启动的服务。 所以当你使用netstat之前和之后,它会正确地报告没有任何东西正在监听端口。

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

祝你好运!

更新:尝试使用以下来获取所有的监听器:

 asadmin get server | grep -i listener 

这里同样的问题。 它与/ etc / hosts有关,我做了一个cat / etc / hostname并添加了这个127.0.0.1

这个错误不仅在端口被占用时抛出,而且在/etc/hosts文件出现错误时也会错误地抛出。

确保你的主机名有正确的定义(最近有没有更改过?),并且不会丢失。 例如,如果您只是将主机名(通过hostname/etc/hostname )更改为server.example.com ,请确保您的/etc/hosts文件具有:

 127.0.0.1 server.example.com localhost 

最近,我发现启动服务器到VPC需要相当多的额外configuration(一旦启动)。 一个关键的线索:

  nslookup `hostname` 

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

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

希望有所帮助。