Назад | Перейти на главную страницу

Не могу запустить Glassfish на ec2 - не могу открыть порт

Я пытаюсь запустить 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:8080
and 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 / хост так, чтобы он мог успешно выполнять указанную выше команду.

Надеюсь, это поможет.