
На машине Linux пытаюсь запустить сервер Glassfish.
./startserv
Это возвращает следующее сообщение:
There is a process already running using the admin port 4848 -- it is probably another instance of a Glassfish server
Попытался определить, какой это процесс, с помощью следующей команды:
lsof -t -i tcp:4848
На другой машине, на которой запущен Glassfish, эта команда возвращает идентификатор процесса, используемый Glassfish. Однако на машине, на которой у нас возникла проблема, ничего не возвращается.
Каков наилучший способ определить и завершить процесс, использующий порт 4848, учитывая, что это lsof -t -i tcp:4848
не помогает?
Спасибо
решение1
Вероятно, здесь происходит две вещи. Во-первых, что-то прослушивает порт, а lsof и его друзья это пропускают, или скрипт запуска/сообщение об ошибке перепутаны.
Сетевые пространства имен могут скрывать порт, но если вы хотите напрямую запросить файловую систему proc, попробуйте
grep 12f0 /proc/net/tcp
grep 12f0 /proc/net/tcp6
12f0 — это 4848 в шестнадцатеричном формате, и в этих файлах ядро хранит информацию о сокетах TCPv4 и TCPv6.
Если вы получаете совпадающие строки, то действительно что-то прослушивает порт, и ваши инструменты подозреваются. Отсутствие совпадения означает, что либо у вас задействованы пространства имен, либо скрипт запуска работает.
Вы также можете проверить, действительно ли сокет используется, с помощью netcat.
nc -l 4848
Если он молчит, то все в порядке, если он жалуется на использование сокета, то он действительно используется, и вам нужно проверить исправность ваших инструментов и пространств имен.