Node.js Порт 3000 уже используется, но на самом деле это не так?
Я работал с проектом node.js в течение нескольких недель, и он работал отлично. Обычно я использую 'npm start', чтобы запустить свое приложение и просмотреть его в браузере на локальном хосте, порт 3000.
Сегодня я начал получать следующую ошибку при использовании npm start:
Server started on port 3000
Port 3000 is already in use
Я проверил монитор ресурсов, и у меня нет другого процесса, работающего на порте 3000. Почему я получаю это сообщение об ошибке?
В моем app.js у меня есть следующий код для установки порта... это неправильно? Раньше все работало нормально, поэтому я не уверен, что делаю неправильно.
// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
console.log('Server started on port '+app.get('port'));
});
Спасибо за помощь!
РЕДАКТИРОВАТЬ: я попытался запустить netstat и TCPView, чтобы проверить, какой процесс использует порт, но ничего не использует этот порт. Я также попытался перезагрузить свой ноутбук, но я все еще получаю ту же ошибку.
47 ответов
Вы можете искать, как убить этот процесс.
Для поиска Linux/Mac OS (sudo) запустите это в терминале:
$ lsof -i tcp:3000
$ kill -9 PID
В Windows:
netstat -ano | findstr :3000
tskill typeyourPIDhere
менять tskill
за taskkill
в Git Bash
Может быть, вы можете принять это как ссылку. Эта единственная командная строка может убить процесс, запущенный на данном порту.
npx kill-port 3000
Чтобы убить несколько портов.
npx kill-port 3000 8080 4200
Иногда это происходит, как предложила @sova. Это иногда случается со мной, EADDR используется. Обычно в фоновом режиме скрывается окно терминала, в котором все еще выполняется приложение. И это тоже правильно со мной.
Это происходит, когда вы долго открываете терминал, да, вы имеете право, вы должны остановить процесс. Но иногда это не останавливалось на заднем плане. Поэтому лучшее решение - закрыть терминал и запустить его снова. Это решит вашу проблему. потому что в моем случае это работает.
Также,
sudo lsof -i:<PORT_NO>
закройте экземпляр на настоящее время, но не можете остановить процесс в фоновом режиме. Так что на один раз,
sudo kill <PID>
работает, но опять же, когда мы обновляем наш код и сохраняем, эта проблема возникает снова, как с Nodemon.
Так что выход из терминала решит проблему. ИЛИ ЖЕ
killall -9 node
Убиваем процесс, которому принадлежит порт 3000
Во-первых, давайте посмотрим, как мы можем убить процесс, у которого открыт порт.
Используя команду lsof, мы можем получить PID, имеющий данный порт:
$ lsof -i :3000 -t
12345
Тогда мы можем убить этот процесс, просто выполнив:
$ kill 12345
Давайте превратим это в однострочник:
lsof -i 3000 -t | xargs kill
Если вы используете переменную среды для установки порта сервера, мы можем указать это вместо жесткого кодирования наших значений:
lsof -i ${PORT} -t | xargs kill
Наконец, мы можем по умолчанию использовать порт 3000, если переменная среды не установлена:
lsof -i ${PORT:-3000} -t | xargs kill
Получение nodemon для выполнения хуков
Nodemon позволяет настраивать перехватчики событий через файл конфигурации nodemon.json:
{
"events": {
"crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
}
}
Это заставит nodemon выполнить sh -c 'lsof -i:${PORT:-3000} -t | xargs
kill всякий раз, когда ваше приложение падает, тем самым убивая порожденный им дочерний процесс, который держит порт открытым.
или вы можете попробовать это
fuser -k PORT-NO/tcp
например:
fuser -k 3000/tcp
У меня такая же проблема. (Следующие шаги хорошо работают в Windows 10):
- Открыть диспетчер задач (нажмите Ctrl+Alt+Delete)
- Выберите вкладку "Процессы"
- Искать 'Node.js: серверный JavaScript'
- Выберите его и нажмите кнопку "Завершить задачу"
Теперь вы можете запустить npm start
,
Надеюсь, это поможет вам.
Для окон диспетчер задач определенно покажет запущенный процесс узла. Попробуйте убить процесс, это решит проблему.
killall -9 node
указанная выше команда может выйти из ssh-соединения с кодом, когда вы разрабатываете удаленно, и убить все процессы узла, которые могут привести к проблемам, особенно если у вас есть некоторые приложения на производстве, использующие узел, есть лучший способ сделать это, используя netstat для получения всех узлов процессы с портом, который они используют, а затем убить единственный, который вы хотите, по PID
netstat -lntp | grep node
вы получите все процессы узла
tcp6 0 0 :::5744 :::* LISTEN 3864/node
а затем, когда вы получите PID (3864), просто убейте процессы по PID
kill -HUP PID
Я использовал экспресс-сервер с nodemon на NodeJS. Я получил следующее сообщение и похоже на ошибку:
$ node ./bin/www
Port 3000 is already in use
Существует общее решение, заключающееся в том, что если вы прервете все подключения к серверу узла, вы можете добавить этот код в свой файл package.json:
"scripts": {
"start": "node ./bin/www",
"stop": "taskkill -f -im node.exe"
},
Кроме того, я нашел несколько решений Windows command и bash на Win 10 x64.
Все мои заметки здесь:
# Завершить все подключения к серверу NodeJS
$ taskkill -f -im node.exe
SUCCESS: The process "node.exe" with PID 14380 has been terminated.
SUCCESS: The process "node.exe" with PID 18364 has been terminated.
SUCCESS: The process "node.exe" with PID 18656 has been terminated.
# Пример: откройте диспетчер задач Windows и посмотрите номер PID "node.exe" в Windows
>> Command Line
$ netstat /?
$ netstat -a -n -o
$ netstat -ano
# Убить процесс в Windows по номеру порта (пример)
За помощью:
$ taskkill /?
$ tskill /?
Код 1:
$ taskkill -pid 14228
ERROR: The process with PID 14228 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option).
Код 2:
$ taskkill -f -pid 14228
SUCCESS: The process with PID 14228 has been terminated.
Код 3:
$ tskill 14228
# Командная строка для просмотра конкретного порта
в cmd:
$ netstat -ano | find "14228"
в bash:
$ netstat -ano | grep "14228" or $ netstat -ano | grep 14228
# Найдите node.exe с помощью команды "tasklist"
в cmd:
$ tasklist | find "node"
в bash:
$ tasklist | grep node
$ tasklist | grep node.exe
node.exe 14228 Console 2 48,156 K
node.exe 15236 Console 2 24,776 K
node.exe 19364 Console 2 24,428 K
Сегодня я столкнулся с той же проблемой, так как нашел решение.
Проблема заключается в том, что в фоновом режиме работают службы узлов, даже если они перезапускаются.
Я получил много ответов, но все они содержат несколько команд. Вот простая команда, которую я нашел для своего случая
sudo pkill node
Это остановит все запущенные процессы из узла и вашего
nodemon
начнет работать как положено.
Я видел то же самое и попробовал все предложения выше, но безуспешно. Вот шаги, которые решают эту проблему для меня: - отключить Wi -Fi - запуск npm (это должно работать) - включить Wi -Fi
Я не совсем уверен, что является основной проблемой, но это решило ее для меня.
Это старый вопрос, но, похоже, никто из респондентов на самом деле его не читал. У меня была такая же проблема, и проблема заключалась в том, что Windows иногда резервирует блоки портов и не позволяет вам их использовать. Порт не отображается через netstat или какой-либо другой инструмент. Вы можете прочитать об этом здесь :
По сути, вы можете сказать Windows, чтобы она оставила ваш порт в покое:
netsh int ipv4 add excludedportrange tcp startport=3000 numberofports=1 store=persistent
Это происходит, когда ни одна задача не указана с командой
lsof -i:3000
И все равно получаешь ошибку
Error: listen EADDRINUSE: address already in use 0.0.0.0:3000
Одна из причин заключается в том, что в Nginx conf.d проверяется, что ни одна из конфигураций не прослушивает порт 3000.
Это случается со мной иногда, EADDR в использовании. Обычно в фоновом режиме скрывается окно терминала, в котором все еще выполняется приложение. Вы можете остановить процесс с помощью Ctrl+C в окне терминала.
Или, возможно, вы слушаете порт несколько раз из-за copy/pasta =)
Я столкнулся со странным
port problem
в последнее время на win10 не удается запустить серверный процесс, прослушивающий порт 8080, и я изменил его на 18080, затем он работает, но через некоторое время такая же проблема появляется снова. Но я не могу найти какой-либо процесс, использующий порт, я пробовал
currpots
а также
netstat
, ни один из них не работает, и я пытаюсь открыть порт
python -m http.server 18080
python -m http.server 18081
python -m http.server 18082
python -m http.server 18083
python -m http.server 18084
...
, Большинство говорит, что похожее сообщение «порт уже используется» К счастью, я поискал и понял причину. От
netsh interface ipv4 show excludedportrange protocol=tcp
Видно, что некоторые порты исключены для использования, через эти порты не открываются и не прослушиваются. И по
net stop winnat
Освобождаются самые исключенные порты, затем эти порты можно использовать.
Откройте диспетчер задач (нажмите Ctrl+Alt+Del. Выберите "Вкладка процессов". Найдите "Node.js: серверный JavaScript". Выберите его и нажмите кнопку "Завершить задачу".
Если вы хотите закрыть только один порт, просто запустите эту команду.
kill -9 $(lsof -t -i:3000)
Разница между pkill
а также kill
кто-то обрабатывает глину. В kill вы применяете фильтр. вы просто останавливаете нужный порт.
В pkill
команда закрывает все процессы узла.pkill -9 node
Используйте pkill, чтобы избежать утечек памяти, которые иногда возникают во время разработки. если имеется более одного узла, он убивает их всех.
Также показано использование скриптов в package.json.
"scripts": {
"server:start": "cd server && yarn start",
"server:restart": "cd server && yarn restart",
"frontend:start": "cd frontend && yarn start",
"frontend:restart": "kill -9 $(lsof -t -i:4200) && yarn start:frontend"
},
"scripts": {
"start": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts",
"restart": "pkill -9 node && start",
"kill": "pkill -9 node"
},
Пришел от Google сюда с решением для High Sierra.
Что-то изменилось в настройках сети macos, и некоторые приложения (включая ping) не могут разрешить localhost.
Редактирование / etc / hosts похоже на исправление:
CMD: sudo nano /etc/hosts/
содержание 127.0.0.1 localhost
Или просто (если вы уверены, что ваш / etc / hosts пуст)sudo echo '127.0.0.1 localhost' > /etc/hosts
Я потратил 2 часа, чтобы выяснить, почему EADDRINUSE
не позволяло мне запустить приложение (другие серверы экспресс-узла были в порядке)... оно начало работать после добавления
lazyConnect: true,
к конфигурации источника данных.
Не спрашивайте меня, почему это помогло. Я не знаю. Я помещаю эту информацию здесь только для людей, имеющих ту же самую проблему.
npx kill-port 3000
тогда вы можете показать так:
Need to install the following packages:
kill-port@2.0.1
Ok to proceed? (y)
затем введите: y
Я получил эту проблему с помощью Git Bash на Windows. я бегу npm start
, или же node app.js
, После короткого завершения работы с Ctrl+C и повторной попытки запустить сервер, используя npm start
или же node app.js
тогда я получаю это сообщение об ошибке.
Когда я делаю это с обычной командной строкой Windows, она работает нормально.
Или Вы можете сделать это по-другому. Откройте диспетчер задач и найдите строку "Node.js: JavaScript на стороне сервера". Выберите это и завершите задачу. Это должно работать сейчас.
Благодарю.
Перед запуском nodemon сначала запустите mongod. Вы никогда не получите эту ошибку.:)
Для пользователей Windows, просто остановите все процессы Node.js в диспетчере задач
Надеюсь, это поможет
Для пользователей Windows вы можете использовать инструмент CurrPorts, чтобы легко убивать используемые порты.
Просто хотел упомянуть одну проблему, которая не охвачена уже данными ответами. Это связано с тем, что Hyper-V (и Docker) «крадет» порт:
Цитата из проблемы Docker (ссылка ниже):
Отключить Hyper-V (что потребует пару перезапусков)
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
Когда вы закончите все необходимые перезапуски, зарезервируйте нужный порт, чтобы Hyper-V не зарезервировал его обратно.
netsh int ipv4 add excludedportrange protocol=tcp startport=3000 numberofports=1
Повторно включите Hyper-V (для чего потребуется несколько перезапусков)
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
https://github.com/docker/for-win/issues/3171#issuecomment-459205576
если вы много раз вызывали функцию app.listen на одном и том же порту, вы можете получить эту ошибку.
Вы можете проверить свои коды для любого цикла
Попробуйте открыть localhost в вашем браузере. Просто введите: localhost:3000
в адресной строке.
Если приложение открывается, это означает, что ваш предыдущий npm run
все еще активен. Теперь вы можете просто внести изменения в код и увидеть результаты, если вы разрабатываете одно и то же приложение или хотите запустить другое приложение, просто немного подправьте код (в index.js ранее запущенного приложения) и (вероятно, обновите вкладку браузера), чтобы она вылетела;)..... Теперь иди запустить npm run start
снова из вашего нового каталога приложений. Надеюсь это поможет!:)
или же
Вы можете открыть Диспетчер задач (WINDOWS_KEY+X > Диспетчер задач), и вы увидите строку "Node.js: серверный JavaScript". Выберите это и завершите задачу.... Это должно работать сейчас!
Если нет, измените .env
файл вашего приложения для включения port:3002
и запустите новое приложение. Это позволит вам запустить два отдельных приложения на разных портах. Ура!!
Просто в Linux
- Откройте свой терминал
- Свободный порт от процессов -> kill $(lsof -t -i:$port)
Это может быть процесс администратора, работающий в фоновом режиме и netstat
не показывает это.
использование tasklist | grep node
найти PID этого процесса администрирования, а затем kill PID