如何解决 PM2 启动时遇到的 "Error: bind EADDRINUSE" 问题

阅读时长 2 分钟读完

问题描述

当我们在使用 PM2 启动多个 Node.js 应用程序时,很可能会遇到一个常见的错误:Error: bind EADDRINUSE。这个错误会提示我们该端口已经被占用,导致该应用程序无法启动。

问题原因

该错误的原因是该应用程序尝试监听已被其他程序占用的端口。

解决方法

有几种方法可以解决这个问题:

1. 杀死占用该端口的进程

我们可以使用以下命令找到正在占用该端口的进程:

其中,端口号为需要被释放的端口号。该命令会列出所有占用该端口的进程。

然后,我们可以使用以下命令杀死该进程:

其中,进程号为上一条命令列出的占用该端口的进程号。这样,该进程就被完全终止,该端口就被释放。

2. 使用随机端口作为监听端口

我们可以配置应用程序在启动时监听随机端口,而不是预定义端口。这样,即使该端口已被其他程序占用,我们的应用程序也可以成功启动。

在 Node.js 中,我们可以使用以下代码监听随机端口:

以上代码中,0 表示随机端口。当调用 server.listen() 时,Node.js 会自动选取一个未使用的随机端口来绑定该服务器。

3. 使用 PM2 的端口递增模式

PM2 提供了一种端口递增模式,可以帮助我们避免 EADDRINUSE 错误。该模式会在启动每个进程时,将端口号递增一个特定的值,以避免端口冲突。

以下是如何使用该模式的示例代码:

以上代码将启动 4 个实例,并从端口号 4000 开始,每个实例端口号均递增 1。

总结

在开发和部署 Node.js 应用程序时,我们经常会遇到占用端口导致的 EADDRINUSE 错误。本文介绍了两种基本的解决方法(杀死占用该端口的进程和使用随机端口),以及 PM2 的端口递增模式。通过正确使用这些方法,我们可以避免或解决该错误,确保我们的应用程序成功启动并运行。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64fe994895b1f8cacdd53d5a

纠错
反馈