在 ECS 中分析生产 node.js 服务器

Profiling a production node.js server in ECS

我的 node.js 服务器出现问题,突然出现 CPU 峰值并且请求有大约 3-5 秒的延迟。

这种情况每隔几天发生一次,解决它的唯一方法就是 docker restart 我希望能够查明问题所在(也许是无限期?)。

那么如何在 AWS 中分析生产 node.js 服务器?我知道我可能需要在我的代码中添加一行来激活分析器,重新部署分析器工作是可以的。

前段时间我遇到了一个性能问题,我找到了一个非常方便的解决方案来跟踪问题,而不需要太多关于分析等方面的知识。

我使用了 Nodesource [1] 的 N|Solid。让我解释一下为什么这么方便:

  1. 完全 node.js 兼容性 [2] - 只需将节点可执行文件替换为 nsolid 可执行文件。
  2. 不错的价格 [3] - 免费计划包括 5 个受监控的进程。
  3. 漂亮的可视化 - 帮助您快速发现问题。 [4]
  4. 很好的文档。
  5. 快速设置 - 只需创建一个免费帐户,获取许可证密钥并按照以下 docker-compose 文件所述设置您的 docker 容器:
version: "3.6"
services:
  nsolid_console:
    image: nodesource/nsolid-console
    ports:
      - 9001:9001
      - 9002:9002
      - 9003:9003
      - 6753:6753
    environment:
      - NSOLID_CONSOLE_LICENSE_KEY=${NSOLID_CONSOLE_LICENSE_KEY}
    volumes:
      - ./data/nsolid-console:/var/lib/nsolid/console
    networks:
      default:
        aliases:
          - nsolid_console

  yourService:
    build:
      context: ./
      dockerfile: Dockerfile
    environment:
      - NSOLID_APPNAME=YourApp-Name
      - NSOLID_COMMAND=nsolid_console:9001
      - NSOLID_DATA=nsolid_console:9002 
      - NSOLID_BULK=nsolid_console:9003
    entrypoint: 
      - nsolid your-entrypoint.js
    depends_on:
      - nsolid_console
    links:
      - nsolid_console:nsolid_console

请注意:将 ${NSOLID_CONSOLE_LICENSE_KEY} 替换为您获得的许可证密钥。

参考资料

[1] https://nodesource.com/products/nsolid
[2] https://docs.nodesource.com/nsolid/3.4/docs#node-compatibility
[3] https://nodesource.com/products/pricing
[4] https://docs.nodesource.com/nsolid/3.4/docs#cpu-profiling