Я пытаюсь запустить Glassfish в 64-разрядной версии Ubuntu 10.04 AMI на базе EBS. Я без проблем использовал Glassfish на серверах, отличных от ec2, но на ec2 я получаю следующее сообщение:
$ sudo -u glassfish bin/asadmin start-domain domain1 There is a process already using the admin port 4848 -- it probably is another instance of a GlassFish server. Command start-domain failed.
Я знаю, что ec2 требует, чтобы правила брандмауэра были изменены с помощью ec2-authorize, чтобы внешний трафик проходил через брандмауэр, как мне пришлось сделать, чтобы ssh работал. Это все еще не объясняет ошибку порта, когда все, что я пытаюсь сделать, это запустить Glassfish, чтобы я мог попробовать
$ wget localhost:8080and make sure it's working.
Это очень расстраивает, и я буду очень признателен за любую помощь.
Спасибо.
ОКОНЧАТЕЛЬНОЕ ОБНОВЛЕНИЕ:
Извините, если вы пришли сюда в поисках ответов. Я так и не понял, в чем проблема. Я создал еще один свежий экземпляр, установил то же самое, и Glassfish работал отлично. Во время установки явно что-то сломалось, но не знаю что. Думаю, это останется загадкой.
ОБНОВЛЕНИЕ: вот что я получил от netstat:
# netstat -nuptl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 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 может вызвать проблемы с сетью Java, поэтому я установил следующее:
# sysctl -w net.ipv6.bindv6only=0
ОБНОВЛЕНИЕ: я также подтвердил, что это не имеет никакого отношения к номеру порта (4848). Как вы можете видеть здесь, когда я изменил порт администратора-слушателя в domain.xml на 4949, я получил аналогичное сообщение:
# sudo -u glassfish bin/asadmin start-domain domain1 There is a process already using the admin port 4949 -- it probably is another instance of a GlassFish server. Command start-domain failed.
ОБНОВИТЬ:
Вот содержимое / etc / hosts:
127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::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
Я должен упомянуть, что у меня есть еще один 64-битный фрагмент Ubuntu Lucid 10.04, который НЕ размещен на ec2, и настроил его точно так же, без каких-либо проблем.
Кроме того, server.log также не предлагает особого понимания:
# cat ./server.log Nov 20, 2010 8:46:49 AM com.sun.enterprise.admin.launcher.GFLauncherLogger info INFO: JVM invocation command line: /usr/lib/jvm/java-6-sun-1.6.0.22/bin/java -cp /opt/glassfishv3/glassfish/modules/glassfish.jar -XX:+UnlockDiagnosticVMOptions -XX:MaxPermSize=192m -XX:NewRatio=2 -XX:+LogVMOutput -XX:LogFile=/opt/glassfishv3/glassfish/domains/domain1/logs/jvm.log -Xmx512m -client -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.port=6666 -Djava.security.policy=/opt/glassfishv3/glassfish/domains/domain1/config/server.policy -Dfelix.fileinstall.poll=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=true -Dfelix.fileinstall.debug=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 -domainname domain1 -asadmin-args start-domain,,,domain1 -instancename server -verbose false -debug false -asadmin-classpath /opt/glassfishv3/glassfish/modules/admin-cli.jar -asadmin-classname com.sun.enterprise.admin.cli.AsadminMain -upgrade false -domaindir /opt/glassfishv3/glassfish/domains/domain1 -read-stdin true
такая же проблема здесь. Это связано с / etc / hosts, я сделал cat / etc / hostname и добавил это для 127.0.0.1
Я не знаю, почему появился ваш файл hosts, поскольку они не имеют ничего общего друг с другом.
Мне кажется (на основе ваших изменений), что дело не в том, что что-то в настоящее время прослушивает порт, а в том, что вы, возможно, настроили ДВЕ устройства для прослушивания одного и того же порта в том же экземпляре Glassfish. Поэтому, если вы запустите Glassfish, и он попытается запустить прослушиватели на каждом из портов, он потерпит неудачу и, следовательно, отключит ранее запущенные службы. Поэтому, когда вы используете netstat до и после, он правильно сообщает, что в данный момент на портах ничего не прослушивается.
Убедитесь, что каждый из ваших слушателей находится на другом порту, используя asadmin
, и держу пари, вы обнаружите, что номер порта используется дважды. Или может быть просто инициализация вызывает одновременный запуск двух экземпляров, что даст вам такое же поведение. Можете ли вы попробовать настроить новый домен на разных портах, чтобы увидеть, не возникнет ли у вас аналогичная проблема?
Удачи!
ОБНОВЛЕНИЕ: попробуйте использовать следующее, чтобы получить всех слушателей:
asadmin get server | grep -i listener
Вы правы - межсетевой экран не имеет ничего общего с открытым (предполагаемым TCP?) Портом.
netstat твой друг. Что-то похожее netstat -nupt -l
даст вам представление о том, какие процессы на каких портах прослушивают.
Сообщите нам результат этой команды и поможет ли она указать вам правильное направление.
Эта ошибка выдается не только при захвате порта, но и ошибочно, когда есть ошибка с /etc/hosts
файл.
Убедитесь, что у вас есть правильные определения для вашего имени хоста (вы меняли его недавно?) В файле, и что оно не пропало. Например, если вы только что изменили имя хоста (либо через hostname
или в /etc/hostname
) к server.example.com
, затем убедитесь, что ваш /etc/hosts
файл имеет:
127.0.0.1 server.example.com localhost
Недавно я обнаружил, что для запуска сервера в VPC требуется довольно много дополнительных настроек (однажды отключенных). Ключевой ключ:
nslookup `hostname`
должно сработать. Если не работает, скорее всего, причина в этом.
Вы можете: 1) запустить сервер в EC2-classic 2) настроить свой VPC / хост так, чтобы он мог успешно выполнять указанную выше команду.
Надеюсь, это поможет.