是否可以减少 NodeJS 内存使用(例如,Ghost 博客平台)

Aiz*_*hri 7 memory node.js ghost-blog

CPU [                         0.0%]     Tasks: 15, 2 thr; 1 running
Mem [||||                 14/256MB]     Load average: 0.00 0.00 0.00 
Swp [|                     1/256MB]     Uptime: 15 days, 06:02:31
Run Code Online (Sandbox Code Playgroud)

以上是没有 Ghost 实例时我的服务器(Ramnode,256MB RAM 和 256MB Swap)上的内存使用情况。在我的 VPS 上,我正在运行 4 个Ghost实例。

因此,当我使用命令在此处运行 Ghost 实例时node index.js,它会生成 5 个工人。

PID   USER   PRI  NI  VIRT  RES   SHR  S CPU% MEM%   TIME+  Command
10380 user    20   0  975M 80328  7712 S  0.0 30.6  0:00.00 node index.js
10381 user    20   0  975M 80328  7712 S  0.0 30.6  0:00.00 node index.js
10382 user    20   0  975M 80328  7712 S  0.0 30.6  0:00.00 node index.js
10383 user    20   0  975M 80328  7712 S  0.0 30.6  0:00.00 node index.js
10384 user    20   0  975M 80328  7712 S  0.0 30.6  0:00.00 node index.js
Run Code Online (Sandbox Code Playgroud)

5个工人其实挺多的。而且30%也不少。

而现在,htop阅读

CPU[                               0.0%]     Tasks: 18, 7 thr; 1 running
Mem[|||||||||||||||||||        82/256MB]     Load average: 0.00 0.00 0.00 
Swp[||                          8/256MB]     Uptime: 15 days, 06:22:29
Run Code Online (Sandbox Code Playgroud)

如何减少内存使用?如果我可以调整工人的数量,我应该编辑哪个文件?如果我们这里有 Ghost 开发团队,您对这个问题有什么计划吗?

小智 6

Ghost 每个实例运行一个节点进程。我相信您在那里看到的是htop显示进程的底层线程,因此看起来您有一个 Ghost 实例正在运行,但 node/v8 有五个活动线程。尽管 JavaScript 是单线程的,但引擎/vm 本身也可以是多线程的。

我们(Ghost 项目)确实注意内存占用,以便我们可以做任何我们可以做的事情,使其尽可能小。我个人认为 80MB 相当不错,但显然不同的人和情况对什么是“相当不错”有不同的标准。

  • 感谢@jtw 的回答。所以 80MB 被认为是轻量级的。我个人在这件事上的想法是,每天 80MB 的访问量少于 20 个访问者是相当大材小用的。 (3认同)