Nodejs 用过 pm2 指教一下哦,pm2 重启进程后,浏览器访问一直是请求等待中。。

Nodejs 用过 pm2 指教一下哦,pm2 重启进程后,浏览器访问一直是请求等待中。。

我故意写了个错误,第一次请求有效,日志里面错误也显示出来了,pm2 list看到进程也重新启动了,,但是用浏览器请求的时候一直在请求加载中,,不知道什么原因

不过我本地是好的,就是线上不行,线上是CentOS 6.5

5 回复

Node.js 使用 PM2 时遇到的重启问题

问题描述

我在使用 Node.js 和 PM2 管理应用时遇到了一个问题。当我故意引入一个错误并重启应用时,PM2 能够成功重启进程,并且日志中也显示了错误信息。然而,当我在浏览器中尝试访问应用时,请求一直处于等待状态(即加载中),无法得到响应。

这个问题只在线上环境出现,我的本地开发环境没有问题。线上环境是 CentOS 6.5。

解决方法

根据您的描述,这个问题可能与几个方面有关:

  1. 网络配置:检查服务器的防火墙设置,确保端口是开放的。
  2. 端口绑定:确保应用正确地绑定到了正确的端口,并且该端口没有被其他服务占用。
  3. 日志文件:查看 PM2 的日志文件,找到更多关于请求失败的线索。
  4. PM2 配置:检查 PM2 的配置文件,确保配置正确。

以下是一些具体的步骤和示例代码来帮助您排查问题:

步骤 1: 检查端口绑定

确保您的应用正确地监听了指定的端口。例如,如果您的应用监听的是 3000 端口,可以使用以下代码:

const http = require('http');

const hostname = '0.0.0.0'; // 监听所有网络接口
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

步骤 2: 查看 PM2 日志

使用 PM2 查看日志文件,找到可能的错误信息。可以使用以下命令:

pm2 logs

步骤 3: 检查防火墙设置

确保您的服务器防火墙允许访问 3000 端口。您可以使用以下命令检查和修改防火墙规则:

# 查看当前防火墙规则
sudo iptables -L

# 添加新的规则以允许访问 3000 端口
sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT

步骤 4: 检查 PM2 配置

确保您的 PM2 配置文件正确无误。例如,ecosystem.config.js 文件可能包含如下配置:

module.exports = {
  apps : [{
    name: "app",
    script: "./index.js",
    env: {
      NODE_ENV: "development"
    },
    env_production: {
      NODE_ENV: "production"
    }
  }]
};

通过以上步骤,您应该能够找到并解决导致请求一直等待的问题。希望这些信息对您有所帮助!


我也遇到过这个问题,你Node用的是哪个版本,pm2官方推荐的是0.11.x

node换到0.11.x

kill, 然后重新启动。

当使用 pm2 重启 Node.js 进程后遇到浏览器请求一直处于等待状态时,通常有几个可能的原因需要检查:

  1. PM2 配置问题:确保 PM2 的配置文件(如 ecosystem.config.js)正确无误。
  2. 网络或防火墙设置:检查服务器上的网络设置和防火墙规则是否允许外部连接到你的应用端口。
  3. 进程启动问题:有时候 PM2 启动的应用程序可能会因为某些错误而无法正常启动,导致请求挂起。

示例代码

假设你的 ecosystem.config.js 文件如下:

module.exports = {
  apps: [
    {
      name: 'app',
      script: './app.js',
      instances: 'max',
      autorestart: true,
      watch: false,
      max_memory_restart: '1G',
      env: {
        NODE_ENV: 'development',
      },
      env_production: {
        NODE_ENV: 'production',
      }
    },
  ],
};

常见排查步骤

  1. 检查日志

    使用 PM2 查看最近的日志:

    pm2 logs
    

    或者查看特定应用程序的日志:

    pm2 logs app
    

    从日志中找出错误信息。

  2. 手动启动服务

    尝试手动启动 Node.js 应用程序,看看是否有异常输出:

    node app.js
    
  3. 检查网络

    确保你的应用监听的是正确的 IP 和端口,并且防火墙允许访问该端口。

  4. 确认 PM2 状态

    检查 PM2 中的应用状态:

    pm2 status
    

如果发现应用启动过程中有错误,可以修复这些错误并重新启动应用。如果一切正常,但仍然有问题,检查防火墙、SELinux 设置等系统层面的限制。

回到顶部