Tomcat не запускается (бросает java.net.BindException:)
Я выполнил следующие настройки для запуска веб-проекта Java, но почему-то мой Tomcat не запускается с Eclipse:
JAVA_HOME : C:\Program Files\Java\jdk1.6.0_03
PATH : C:\Program Files\Java\jdk1.6.0_03\bin
CATALINA_HOME : D:\javaworkspaces\apache-tomcat-7.0.27
Затем, как требуется, я установил новый сервер из Eclipse и предоставил путь установки Tomcat.
Как было сказано на некоторых форумах, я добавил tomcat-juli.jar
в путь к классу.
Несмотря на все это, когда я пытаюсь запустить Tomcat Server, я получаю ошибку, поскольку tomcat не смотрит в 45 секунд.
Я получаю следующее сообщение журнала:
Jul 26, 2012 5:49:34 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre7/bin/client;C:/Program Files/Java/jre7/bin;C:/Program Files/Java/jre7/lib/i386;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Java\jdk1.6.0_03\bin;D:\eclipse-jee-indigo-SR2-win32\eclipse;;.
Jul 26, 2012 5:49:34 PM org.apache.tomcat.util.digester.SetPropertiesRule
begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:JEE_Day01' did not find a matching property.
Jul 26, 2012 5:49:34 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-80"]
Jul 26, 2012 5:49:35 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Jul 26, 2012 5:49:35 PM org.apache.coyote.AbstractProtocol init
SEVERE: Failed to initialize end point associated with ProtocolHandler ["ajp-bio-8009"]
java.net.BindException: Address already in use: JVM_Bind <null>:8009
at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:393)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:566)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:417)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:956)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:624)
at org.apache.catalina.startup.Catalina.load(Catalina.java:649)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:449)
Caused by: java.net.BindException: Address already in use: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:49)
at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:380)
... 16 more
Jul 26, 2012 5:49:35 PM org.apache.catalina.core.StandardService initInternal
SEVERE: Failed to initialize connector [Connector[AJP/1.3-8009]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[AJP/1.3-8009]]
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:624)
at org.apache.catalina.startup.Catalina.load(Catalina.java:649)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:449)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
at org.apache.catalina.connector.Connector.initInternal(Connector.java:958)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
... 12 more
Я ссылался на несколько форумов, но плохо придерживался ситуации. Пожалуйста, направляйте меня.
Ответы
Ответ 1
эти строки:
SEVERE: Failed to initialize end point associated with ProtocolHandler ["ajp-bio-8009"]
java.net.BindException: Address already in use: JVM_Bind <null>:8009
означает, что на порту 8009 уже есть служба, работающая уже с tomcat (с ajp)?
Если служба, работающая на 8009, необходима, вы можете изменить конфигурацию соединителя в файле server.xml примерно так:
<Connector port="8089" protocol="AJP/1.3" redirectPort="8443" />
Ответ 2
В нем говорится, что номер порта 8009
уже занят каким-либо другим процессом, запущенным на вашей ОС попробуйте выполнить поиск этого процесса и остановите его или запустите свой tomcat на другом (свободном) порту
Ответ 3
убейте соответствующий (прослушивающий) процесс на этом порту, то есть 8009.
используйте
netstat -a -o -n
чтобы найти PID процесса. Это может выглядеть примерно так
TCP [::]: 8009 [::]: 0 LISTENING 892
используйте команду taskkill, чтобы убить процесс.
Пример:
taskkill /F /PID 892
Ответ 4
java.net.BindException: адрес уже используется: JVM_Bind: 8009
Это означает, что какой-то другой процесс уже использует этот порт. Может быть, это еще один экземпляр Tomcat?
Ответ 5
Вам не нужно менять server.port, чтобы устранить эту проблему...
Пользователи Mac/Unix/Linux: если после перезагрузки Tomcat эта проблема все еще существует, вероятно, из-за того, что Tomcat был отключен неправильно, и теперь есть все еще связанные с ним ресурсы, которые теперь заблокированы.
Вы можете увидеть PID этих ресурсов, выполнив следующую команду:
lsof | grep tomcat
Завершите эти процессы, используя:
kill -15 <PID>
Это должно решить вашу проблему.
Используя команду kill -15 для TERM (-15), предпочтительным является процесс, а не SIGKILL (-9). Переключатель -15 отправляет процессу сигнал для начала фаз выключения и очистки ограниченных ресурсов.
Ответ 6
Попробуйте: http://localhost: 8089
если он не работает (или)
Попробуйте это: Set: JRE_HOME: C:\Program Files\Java\jre1.5.0_11 (зависит от вашей версии JRE) и добавьте C:\Program Files\Java\jre1.5.0_11 (зависит от вашей версии JRE)\bin путь
Eclipse- > перейдите в настройки Windows: server- > RuntimeEnvironment удалите добавленные серверы и рефери и добавьте новый TomcatServer
Ответ 7
TIL: Кто-то еще на сервере может запустить IIS на порт 80 и никому не сообщать.
Если у вас есть ваш tomcat, настроенный для того же порта, он также сообщит об этой ошибке.
Порт на IIS или tomcat необходимо будет изменить.
Чтобы изменить порт в IIS:
Администрирование | Менеджер информационных служб Интернета (IIS)
Щелкните правой кнопкой мыши по умолчанию веб-сайт | Изменить привязки...
Изменить порт
-OR -
Чтобы изменить порт в Tomcat:
Откройте файл conf\server.xml и обновите значение порта в теге:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
Перезапустить Tomcat
Наслаждайтесь 2-мя веб-сервисами.
Ответ 8
Что-то еще использует порт 8009.
Либо отключите вещь, использующую 8009, либо измените файл server.xml, чтобы использовать другой порт, чем 8009
Ответ 9
Это обычно происходит, если порт Connector/shutdown tomcat уже используется.
Сначала запустите shutdown.bat(Иногда мы пропускаем, что один экземпляр tomcat уже запущен)
Затем в командной строке запустите
netstat -aon | findstr 0.0:<your port number which is giving bind exception>
Получить PID приложения, которое в настоящее время использует ваш порт. Удалите это приложение или используйте другой порт, который не указан при запуске
netstat -a -o -n