lidashuang lidashuang - 27 days ago 9
Node.js Question

Nodejs application Error: bind EADDRINUSE when use pm2 deploy

Express application deploy with pm2

database is mongodb

when run app with command:

NODE_ENV=production pm2 start app.js -i max


aften has Error: bind EADDRINUSE, this is logs, when error,

[app err (l0)] js:1073:26
[app err (l1)] at Object.30:1 (cluster.js:587:5)
[app err (l2)] at handleResponse (cluster.js:171:41)
[app err (l3)] at respond (cluster.js:192:5)
[app err (l4)] at handleMessage (cluster.js:202:5)
[app err (l5)] at process.EventEmitter.emit (events.js:117:20)
[app err (l6)] at handleMessage (child_process.js:318:10)
[app err (l7)] at child_process.js:392:7
[app err (l8)] at process.handleConversion.net.Native.got (child_process.js:91:7)Error: bind EADDRINUSE
[app err (l9)] at errnoException (net.js:901:11)
[app err (l10)] at net.js:1073:26
[app err (l11)] at Object.31:1 (cluster.js:587:5)
[app err (l12)] at handleResponse (cluster.js:171:41)
[app err (l13)] at respond (cluster.js:192:5)
[app err (l14)] at handleMessage (cluster.js:202:5)
[app err (l15)] at process.EventEmitter.emit (events.js:117:20)
[app err (l16)] at handleMessage (child_process.js:318:10)
[app err (l17)] at child_process.js:392:7
[app err (l18)] at process.handleConversion.net.Native.got (child_process.js:91:7)


This causes app is slow, How to solve this problem, thanks very much

Answer

I don't know the port used by your application. It depends on your code. In this example, I will assume the port is 3000.

You need to verify if the port is already took on your system. To do that:

  • On linux: sudo netstat -nltp | grep 3000
  • On OSX: sudo lsof -i -P | grep 3000

If you have a result, you need to kill the process (kill <pid>).

You should check if pm2 list returns 0 process. In addition, when you do a pm2 stopAll, the socket is not released. Don't forget to do a pm2 kill to be sure the daemon is killed.

$ pm2 kill
Daemon killed