Решение проблемы с "java.net.BindException: Address is in use"?
Я использую Intellij, пытаясь развернуть приложение Tomcat, но всякий раз, когда я пытаюсь запустить его, я получаю следующую ошибку:
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 1098; nested exception is:
java.net.BindException: Address already in use
Теперь я вручную искал процесс, происходящий в этом порту, с помощью:
lsof -i:1098
И я нашел java-процесс и убил его тоже:
ps aux | grep java
kill -9 20386
И это сработало, но я должен сделать это EVERYTIME. Я открываю Intellij. Если я хочу повторно запустить сервер, не выходя из Intellij, я не могу, потому что я получу эту ошибку. Кто-нибудь знает о постоянном исправлении для этого, а не просто вручную убивает его каждый раз?
Ответы
Ответ 1
Это связано с тем, что JMX контролирует экземпляр Tomcat. Tomcat будет работать на порте 9999, поэтому, когда JMX хочет начать проверять завершение работы, он не может привязываться к этому порту.
Один из способов исправить это - определить переменную среды CATALINA_OPTS.
Настройка этих свойств в JAVA_OPTS пытается запустить jmx-сервер при запуске tomcat И когда вы завершаете tomcat. Следовательно, порт уже используется исключение. Вам необходимо установить эти свойства для CATALINA_OPTS вместо JAVA_OPTS. Это будет работать только при запуске tomcat.
CATALINA_OPTS = "$ CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port = 8999"
CATALINA_OPTS = "$ CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl = false -Dcom.sun.management.jmxremote.authenticate = false"
Что это исправляет для меня в $HOME/.bashrc Я добавляю этот экспорт:
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999"
Кредит:
https://bowerstudios.com/node/636
Ответ 2
Нажмите на значок черепа после остановки сервера, чтобы убить все связанные процессы. Это должно помочь в решении проблемы с портом.
Ответ 3
Я столкнулся с этой проблемой, я не убил мое предыдущее приложение на том же порту. Я просто убил его, используя kill -9 PID, и я был в порядке.