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