Next.js 在 VPS 上需要多少 RAM?

每个 Next.js 申请都没有单一的 RAM 要求。静态页面、基于会话的仪表板和呈现大型表格的页面执行不同的工作。仅每月访客数量并不能说明您需要的 VPS。

更好的问题是您的应用程序需要多少内存及其依赖项、并发峰值和部署工作流程。本指南在构建预算的同时将编译与处理访问者的服务器分开。

分离构建、空闲和加载

构建会转换源代码并可以提前生成页面。空闲服务器保留其运行时和加载的模块。在负载下,多个渲染、网络调用和响应可以一起激活。分别测量这三种状态。

当 CI 执行构建时,其峰值不会直接调整生产 VPS 的大小。如果同一台服务器构建并为站点提供服务,请在该时间间隔内为两者制定预算。新旧版本之间的部署重叠增加了另一个需要测试的场景。

衡量正确的流程

JavaScript 堆只是 Node 内存的一部分。 RSS 包括驻留进程页面,包括本机分配。在 Linux 上,PSS 按比例分配共享页面,在比较进程树时非常有用。

对于 systemd 服务,还要观察 cgroup 内存。它使用自己的会计来覆盖该组,这与 PSS 不同。记录指标并在运行之间保持一致。单独测量一个工人会忽略父工人、其他工人和本机组件。

Terminal
systemctl show my-next-app.service -p MemoryCurrent -p MemoryPeak
ps -eo pid,ppid,rss,comm --sort=-rss

测量您的路线和交通高峰

在几次访问加载公共路径后观察空闲内存。然后将逐渐增加的负载应用于动态页面、API 和昂贵的路由。验证响应内容:轻量级错误页面可以在隐藏故障的同时产生令人印象深刻的吞吐量。

记录峰值内存、延迟、错误和并发。如果应用程序依赖于会话,则包括经过身份验证的流量。匿名主页流量可能无法描述客户仪表板。短期是一个起点,而不是几周内稳定的证据。

整个服务器的预算

添加操作系统、代理、任何数据库、应用程序以及峰值和部署的空间。使用来自目标服务器或代表性环境的测量结果。内存限制可以保护边界;它不能保证应用程序有足够的空间。

假设示例:从 2,048 MiB 中,为系统和共享服务保留 500 MiB,然后为峰值和部署重叠保留 400 MiB。这就留下了 1,148 MiB 供应用程序使用。这些值说明了计算结果,而不是 Next.js 最小值或通用建议。将它们替换为您的测量值。

阅读基准测试及其配置

在我们的 PRNext 与 Next.js 活动中,小型 VPS 上的普通 SSR 页面对 PRNext 使用 113.88 MiB PSS,对 Next.js 使用 101.38 MiB。对于另一台机器上的两个 CPU 预算,值为 117.50 和 173.30 MiB。排名取决于上下文。

这些结果描述了已识别的 PRNext 0.1.18-alpha 候选者、夹具应用和短窗口。他们不会衡量您的应用程序、其构建或最终版本档案。睡眠是另一种状态:它释放不活动的工人的记忆并增加唤醒成本。

读取基准配置和数据

了解空闲内存和唤醒成本

从实际瓶颈出发决定

足够的内存并不能阻止饱和的 CPU 增加延迟。更多 CPU 不能修复保留的对象或数据库内存不足的问题。查找当请求减慢时降级的资源。

每次更改后重复相同的工作负载。如果记忆力在类似的工作中持续增长而没有稳定下来,请调查记忆力。如果峰值合理,请重新考虑构建的运行位置、进程计数或可用容量。

诊断 Next.js 内存使用率较高

来源和进一步阅读

返回博客