为什么同样一个 NodeJs 程序,在本地开发机和服务器上内存用量差 10 倍?

发布于 1周前 作者 bupafengyu 来自 nodejs/Nestjs

为什么同样一个 NodeJs 程序,在本地开发机和服务器上内存用量差 10 倍?

ps aux的输出:

本地开发机 archlinux node v6.9

?    8051  8041  0 179194 24716  0 22:46 pts/0    00:00:00 node /home/?/ws/?/node_modules/.bin/babel-node ./src/server.js

服务器 debian 8 node v6.9 官方 lts 二进制版

app      24198  0.3 31.9 1372392 161312 ?      Sl   14:09   0:09 /usr/bin/nodejs /opt/apps/?/lib/server.js

差了快有 10 倍?都是刚启动状态。

服务器是运行的经打包程序中babel转过后的目标代码,本地直接用babel-node


2 回复

那你试试本地运行转码后的目标代码看看


关于Node.js程序在本地开发机和服务器上内存用量差异显著的问题,这通常涉及多个因素。以下是一些可能的原因及解释:

  1. 环境差异:本地开发机和服务器在硬件配置、操作系统、以及运行的其它进程等方面可能存在显著差异,这些都会影响Node.js程序的内存用量。
  2. 负载不同:服务器可能面临更高的并发请求和数据处理量,导致Node.js程序需要占用更多内存。
  3. 垃圾回收机制:Node.js使用V8引擎的垃圾回收机制,在本地和开发机上的回收效率和频率可能不同,导致内存用量差异。

以下是一个简单的Node.js内存使用监控示例,可以帮助你诊断内存用量问题:

const { performance, PerformanceObserver } = require('perf_hooks');
const obs = new PerformanceObserver((list) => {
  console.log(list.getEntries()[0]);
  process.exit();
});
obs.observe({ entryTypes: ['measure'], buffered: true });

setTimeout(() => {
  performance.mark('A');
  // 模拟一些操作
  setTimeout(() => {
    performance.mark('B');
    performance.measure('A to B', 'A', 'B');
  }, 1000);
}, 1000);

建议在本地开发机和服务器上分别运行该程序,并对比内存用量,以更好地理解差异所在。同时,考虑使用Node.js提供的内存分析工具(如process.memoryUsage())来进一步诊断内存用量问题。

回到顶部