Next.js 在 VPS 上需要多少 RAM?
通过分离构建内存、空闲内存和加载内存来调整 Next.js VPS 的大小。了解如何衡量整个服务器的应用程序和预算。
内存增加,网站速度变慢,进程重新启动。在提高堆限制之前,确定增长的内容和时间。原因可能是构建、缓存、大型响应或仍然可访问的对象。
本指南遵循可重复的调查。仅高使用率并不会造成泄漏,并且服务器测量需要与浏览器选项卡内存分开。
记录节点和 Next.js 版本、启动命令和容器或服务限制。下一个开发进程保留不描述下一个启动的编译工具。下次构建期间失败又是另一种情况。
重启前阅读日志。 V8 堆错误和因系统内存限制而终止的进程是不同的信号。保留时间戳、PID 和工作负载。仅 VPS 范围的图表无法将内存归因于 Next.js。
node --version
npm ls next react react-dom
ps -eo pid,ppid,rss,comm --sort=-rssprocess.memoryUsage() 报告的值包括 rss、heapUsed、heapTotal、external 和 arrayBuffers(以字节为单位)。在您正在调查的应用程序进程中调用它,例如通过私有仪器。与它一起运行 node -e 只会测量该新进程。
如果 heapUsed 在收集后下降,而 RSS 保持高位,则不会建立 JavaScript 泄漏。本机分配、缓冲区和分配器行为也值得研究。对于多个进程,还要观察整个服务组。保持诊断端点的私密性。
const timer = setInterval(() => {
const { rss, heapUsed, external } = process.memoryUsage();
console.log(JSON.stringify({
event: "memory-sample",
pid: process.pid,
rss, heapUsed, external,
at: new Date().toISOString()
}));
}, 10000);
timer.unref();选择一条可疑的路由,重复一批相同的请求,然后让服务器解决。每批后记录值。达到稳定状态的初始上升可以反映模块加载或有界缓存。
可比批次后的持续增长需要更仔细的研究。检查每个用户的全局集合、没有过期的缓存、保持活动状态的订阅以及闭包保留的大对象。如果应用程序流响应,则包括取消的请求和中断的连接。
如果构建失败,请确定阶段:转换、TypeScript 检查或预渲染。为数千个参数生成页面与加载大型编译器依赖项不同。
Next.js 记录了一个实验性的构建内存诊断模式,其限制取决于工作线程和构建引擎。使用前请检查您的版本的适用性。减少分支上的导入或生成批次并比较结果。增加 --max-old-space-size 不会创建 RAM 并且可以使进程更接近 VPS 限制。
堆快照可让您检查对象及其保留路径。比较场景中等效点的捕获,然后调查后续批次后剩余的内容。防止释放的引用比单独的对象大小更重要。
捕获可能会暂停进程并需要大量额外内存。使用具有合适数据的诊断实例。快照可能包含敏感的应用程序信息,因此请确保它们的私密性。不要公开暴露调试端口。
修复后,重复场景、取消和空闲间隔。比较内存、错误和响应时间。较低的堆使用率和吞吐量崩溃可以反映收集权衡,而不是整体改进。
要评估另一个运行时(例如 PRNext),请保留方法和路由。切换运行时不会自动修复无限制的应用程序缓存。首先验证兼容性,然后测量整个服务。