Node.js:如何在同一台服务器上运行多个不同的应用程序并优化CPU使用率?

Node.js:如何在同一台服务器上运行多个不同的应用程序并优化CPU使用率?,node.js,server,cpu-usage,windows-server,Node.js,Server,Cpu Usage,Windows Server,假设 有200个不同的NodeJs ExpressJs应用程序,它们必须同时运行 考虑到这些应用中有190个几乎没有做什么,但仍然使用了大量的服务器资源 我们使用pm2运行这些应用程序 服务器配置:Windows Server 2008,8核CPU,32GB RAM和2TB硬盘 问题 CPU使用率将立即达到100%,甚至在某些应用程序处于空闲状态时,也会降低服务器的速度 问题 如何优化这个问题?甚至可以在同一台服务器上运行200个不同的应用程序吗 如何限制应用程序使用一定数量的资源 一台机器上的

假设

  • 有200个不同的NodeJs ExpressJs应用程序,它们必须同时运行
  • 考虑到这些应用中有190个几乎没有做什么,但仍然使用了大量的服务器资源
  • 我们使用pm2运行这些应用程序
  • 服务器配置:Windows Server 2008,8核CPU,32GB RAM和2TB硬盘
  • 问题

    CPU使用率将立即达到100%,甚至在某些应用程序处于空闲状态时,也会降低服务器的速度

    问题

  • 如何优化这个问题?甚至可以在同一台服务器上运行200个不同的应用程序吗
  • 如何限制应用程序使用一定数量的资源

  • 一台机器上的200个nodejs实例太多了。每个实例都需要相当多的RAM和CPU

    它们可能需要的虚拟内存比您的机器的物理内存多得多。您的操作系统试图通过在硬盘驱动器之间交换进程RAM来应对过载。颠簸使机器慢下来爬行

    通过使用运行nodejs,可以减少每个nodejs进程使用的内存量

    --max-old-space-size=256 
    
    为每个进程分配256MB。(我认为,默认值为1.5GiB)。但您可以很容易地看到,这将很快耗尽您机器的32GiB内存。而且,nodejs执行该限制的方式是更频繁地进行垃圾收集。垃圾收集是一个CPU密集型过程

    pm2也有可能在管理200个实例时消耗了大量CPU周期

    怎么办

    • 花钱购买更多具有更多RAM和内核的服务器

    • 使用较小的机器,每台机器只用于少数实例。如果您的程序确实间歇运行,AWS micro VM实例(cpu有限)应该可以正常工作

    • 重新编写这200个节点程序,使它们中的许多可以一起在同一个nodejs实例中运行。这是处理大量低负载Javascript程序的好方法。Javascript的回调和事件驱动模型使得在一个实例中运行大量不相关的东西成为可能(只要这些东西避免全局内存)


    当您运行nodejs服务器实例时,即使此instance上当前没有运行任何任务,也会分配资源。当您运行200个实例时,您的计算机将需要分配此资源。可能您需要重构实例并将其转化为最小实例,将许多可能的资源加入最小Instance200应用程序似乎很多。因此e必须是一种使其更小的方法。我会首先尝试实现这一点,然后看看如何使用更多的服务器。\n您实际上正在运行201个应用程序:
    pm2
    本身就是一个应用程序。而且,对于一台机器来说,201个nodejs实例是一个非常大的数字。使用命令行
    htop
    实用程序检查机器中发生了什么,或者如果您不能还有,
    top
    实用程序。你能识别占用你CPU的特定nodejs实例吗?也许是,
    pm2
    ?即使你的CPU使用率很高,你的应用程序是否响应合理?请回答我们更多问题。8核Intel芯片实际上是4核的。它们有所谓的超线程来帮助上下文切换这些应用程序(190个)的CPU使用率大多不到5%,但我们仍然需要它们单独运行。