I have been working with a node.js project for a few weeks and it has been working great. Usually, I use npm start
to run my app and view it in a browser on localhost, port 3000.
Today, I started to get the following error while using npm start:
Server started on port 3000
Port 3000 is already in use
I have checked the resource monitor and I have no other process running on port 3000. Why would I be getting this error message?
In my app.js I have the following code to set the port...is this incorrect? It worked fine before so I'm not sure what I am doing wrong.
// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
console.log('Server started on port '+app.get('port'));
});
Thanks for the help!
EDIT:
I have tried running netstat and TCPView to check what process is using the port, but there is nothing using that port. I also tried restarting my laptop but I still get the same error.
netstat
in a command prompt, or connecting to localhost:3000 with a telnet equivalent - PuTTY, for example.
app.listen()
statements in your app on another .listen()
that is also trying to start a server on that port. The first one works, the second one reports the error. Search your code for .listen
.
You can search on how to kill that process.
For Linux/Mac OS search (sudo) run
this in the terminal:
$ lsof -i tcp:3000
$ kill -9 PID
On Windows:
netstat -ano | findstr :3000
tskill typeyourPIDhere
change tskill
for taskkill
in git bash
Maybe you can take this as reference. This single command line can kill the process running on given port.
npx kill-port 3000
https://i.stack.imgur.com/uqjmN.png
To kill multiple ports.
npx kill-port 3000 8080 4200
npx kill-port 3000
worked for me. Thanks @Penny
Sometimes it happens, as @sova proposed This happens to me sometimes, EADDR in use. Typically there is a terminal window hiding out in the background that is still running the app. And that's also right with me.
It happens, when you have opened terminal for long time, yeah you have right, you have stop the process. But sometimes it didn't stop in the background. So best solution is that you close the terminal and start it again. It will solves your problem. becuase in my case it works.
Also,
sudo lsof -i:<PORT_NO>
close the instance for present time but unable to stop the process in background. So for one time,
sudo kill <PID>
works, but again when we update our code and save, this problem occurs again as with Nodemon.
So exit the terminal will solve the problem. OR
killall -9 node
killall -9 node
I was able to run the server locally.
killall -9 node
it worked. Thanks!
I had the same problem. (The below steps work fine on Windows 10):
Open Task manager (press Ctrl+Alt+Delete) Select the 'Processes tab' Search for 'Node.js: Server-side JavaScript' Select it and click on 'End task' button
Now you can run npm start
.
Hope it helps you.
I also encountered the same issue. The best way to resolve is (for windows):
Go to the Task Manager. Scroll and find a task process named. Node.js: Server-side JavaScript End this particular task.
There you go! Now do npm start and it will work as before!
For windows, The Task Manager would definitely show a node process running. Try to kill the process, it will solve the problem.
Killing a process that owns port 3000
First, let’s take a look at how we can kill a process that has a port open.
Using the lsof command, we can retrieve the PID that has the given port:
$ lsof -i :3000 -t
12345
Then we can kill this process just by doing:
$ kill 12345
Let’s turn this into a one-liner:
lsof -i 3000 -t | xargs kill
If you’re using an environment variable to set the server port, we can specify that instead of hardcoding our values:
lsof -i ${PORT} -t | xargs kill
Lastly, we can default to port 3000 if the environment variable isn’t set:
lsof -i ${PORT:-3000} -t | xargs kill
Getting nodemon to execute hooks
Nodemon lets you set up event hooks through nodemon.json configuration file:
{
"events": {
"crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
}
}
This will cause nodemon to execute sh -c 'lsof -i :${PORT:-3000} -t | xargs
kill command whenever your app crashes, thereby killing the child process it spawned that’s keeping the port open.
or you can try this one
fuser -k PORT-NO/tcp
Eg:
fuser -k 3000/tcp
You can try this aswell
fuser -n tcp -k PORT-NO
Eg:
fuser -n tcp -k 3000
lsof -i :3000 -t
=\
fuser -k port-number/tcp
killall -9 node
the above command can exit vs code ssh connection when you are developing remotely and kill all node processes that can lead to problems especially if you have some apps on production using node , there is a better way to do it by using netstat to get all node processes with the port they are using and then kill the only one you want by PID
netstat -lntp | grep node
you will get all node processes
tcp6 0 0 :::5744 :::* LISTEN 3864/node
and then when you get the PID (3864) just kill the processes by PID
kill -9 PID
or
kill -HUP PID
I was using express server with nodemon on NodeJS. I got the following message and it seems an error:
$ node ./bin/www
Port 3000 is already in use
There is a general solution that if you terminate all node server connections, you can add this code in your package.json file:
"scripts": {
"start": "node ./bin/www",
"stop": "taskkill -f -im node.exe"
},
In addition, I've found several solutions windows command and bash on Win 10 x64.
All my notes are here:
# Terminate all NodeJS Server Connections
$ 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.
# Example: Open the Windows Task Manager and see "node.exe" PID number on Windows
>> Command Line
$ netstat /?
$ netstat -a -n -o
$ netstat -ano
# Kill a process in Windows by Port Number (Example)
For Help:
$ taskkill /?
$ tskill /?
Code 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).
Code 2:
$ taskkill -f -pid 14228
SUCCESS: The process with PID 14228 has been terminated.
Code 3:
$ tskill 14228
# Command line for looking at specific port
in cmd:
$ netstat -ano | find "14228"
in bash:
$ netstat -ano | grep "14228" or $ netstat -ano | grep 14228
# Find node.exe using "tasklist" command
in cmd:
$ tasklist | find "node"
in 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
netstat -ano | find "14228"
and want to use this with taskkill /PID xxx
. I am not able to pipe it with |
nor with >
. It is throwing up on me with a wrong format error. What am I missing? These are the two : netstat -ano | find "14228" | taskkill /PID xxx
or netstat -ano | find "14228" > taskkill /PID xxx
. I have tried this netstat -ano | find "14228" | ( set /P var= && set var ) > taskkill /PID ........
I've seen the same thing and tried all the suggestions above without success. Here are steps that resolve it for me: - turn off wifi - npm start (this should work) - turn on wifi
I'm not exactly sure what the root issue is but that resolved it for me.
netstat -ano
didn't list anything using port 3000.
I was facing the same issue today since I found the solution.
The issue is because there were node services is running in the background even if nodemon
restarts.
I've gone through many answers but all come with multiple commands. There is the simple command I found for my case
sudo pkill node
This will terminate all the running processes from the node and your nodemon
will start working as expected.
This happens to me sometimes, EADDR in use. Typically there is a terminal window hiding out in the background that is still running the app. You can stop process with ctrl+C in the terminal window.
Or, perhaps you are listening to the port multiple times due to copy/pasta =)
.listen()
multiple times?
Open Task Manager (press Ctrl+Alt+Del Select the 'Processes Tab' Search for 'Node.js: Server-side JavaScript' Select it and click on 'End task' button
I have spent 2h on finding out why EADDRINUSE
wasn't allowing me to sart an app (other node-express servers were ok)... it started working after adding lazyConnect: true,
to datasource configuration.
Don't ask me why it helped. I do not know. I am putting this info here just for people having the same issue.
If you want to close only one port, just run this command. kill -9 $(lsof -t -i:3000)
The difference between pkill
and kill
is someone process clay. In kill you apply a filter. you just stop the port you want.
The pkill
command closes all node processes. pkill -9 node
Use pkill to avoid memory leaks that occur occasionally during development. if there is more than one node, it kills them all.
The use of scripts in package.json is also exemplified.
"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"
},
I have encounter a weird port problem
on win10 recently, can not start server process listen on port 8080, and I changed it to 18080 , then it works, but after a while, same problem appear again. But I can not find any process use the port, I have tried currpots
and netstat
, none of them work, and I try open port by
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
...
, Most says similar message of "port already in use" Fortunately, I searched and got the reason. By
netsh interface ipv4 show excludedportrange protocol=tcp
Can see some port are exclude for use, through these port not opened and listened. And by
net stop winnat
Most excluded port are released, these port can be used then.
net stop winnat
- I just forgot that command. Needed it a few weeks ago and today because of the same problem (appears sometimes... why?!). Will add this to autostart.
winnat
service is started by windows hyper-v
This is an old question, but none of the responders seem to have actually read it. I had the same problem and the issue was that Windows sometimes reserves blocks of ports and stops you from using them. The port does not show up via netstat or any other tool. You can read about it here:
Essentially you can tell Windows to leave your port alone with this:
netsh int ipv4 add excludedportrange tcp startport=3000 numberofports=1 store=persistent
It happens when no task is listed with a command
lsof -i:3000
And still, you get an error
Error: listen EADDRINUSE: address already in use 0.0.0.0:3000
One reason is that in Nginx conf.d check none of configuration is listening on port 3000
I got this problem using Git Bash on Windows. I run npm start
, or node app.js
. After terminating it with Ctrl+C shortly and trying to start the server again using npm start
or node app.js
then I get this error message.
When I do this with the regular Windows Command Prompt, however, it works fine.
Or You can do it in another way. Open the Task Manager and Find the "Node.js:Server-side JavaScript" row. Select that and end task. It should work now.
Thanks.
https://i.stack.imgur.com/1hOsY.png
Open your command prompt and first run this command:
netstat -ano | findstr :7001
And then run this command:
taskkill /PID 2820 /F
Came from Google here with a solution for High Sierra.
Something changed in the networking setup of macos and some apps (including ping) cannot resolve localhost.
Editing /etc/hosts seems like a fix:
cmd: sudo nano /etc/hosts/
content 127.0.0.1 localhost
Or simply (if you're sure your /etc/hosts is empty) sudo echo '127.0.0.1 localhost' > /etc/hosts
For windows users, you can use CurrPorts tool to kill ports under usage easily
https://i.stack.imgur.com/LldYw.png
For windows user, Just simple stop all processes of Node.js in Task Manager
Hope it will help
if you called app.listen function many time on same port, you can get this error.
You can check your codes for any loop
Try opening the localhost in your browser. Just type: localhost:3000
in the address bar.
If the app opens-up, it means your previous npm run
is still active. Now, you can just make changes to the code and see the effects if you are designing the same app, or if you wanna run another app, just tweak the code (in index.js of previously running app) a little-bit and (probably refresh the browser tab) to make it crash ;)..... Now go run npm run start
again from your new app directory. Hope this helps! :)
or
You can open the Task Manager (WINDOWS_KEY+X > Task Manager) and you'll see the "Node.js:Server-side JavaScript" row. Select that and end task....It should work now!!
If not, change the .env
file of your app to include port:3002
and run the new app. This will allow you to run two separate apps on different ports. Cheers!!
Simple in linux
Open your terminal
Free port from processes -> kill $(lsof -t -i:$port)
Before running nodemon
, Please start mongod
first. You will never get this error.
It may be an admin process running in the background and netstat
doesn't show this.
Use tasklist | grep node
to find the PID of this admin process and then kill PID
if you are using webstorm just make sure your default port is not 3000 from file -> settings -> Build, Execution, Deployment -> Debugger And there change
Built-in server port
and set it to "63342" or see this answer Change WebStorm LiveEdit Port (63342)
In package.json scripts inlcude:
"start": "nodemon app.js --delay 1500ms"
I believe the issue was for me the time that the old port was not shutting down in time by nodemon for the restart. I experienced the issue using multer.
Success story sharing
lsof
but withsudo lsof
I get something, and killing that process solved this problem.