App Hosting 上的大多数 Next.js 应用都可以保留正常的 Next.js 默认设置。但是,如果您的实例遇到 Memory limit exceeded 错误,您可能需要设置 experimental.isrFlushToDisk: false,以将缓存保留在内存中并防止实例重启。
默认情况下,Next.js 会缓存其在运行时呈现的页面和数据,例如使用增量静态重新生成 (ISR) 生成的页面、路由处理程序响应和提取结果。它会将这些数据保留在内存中,并将其写入应用 .next 目录中的文件。Next.js 不会移除这些文件。
在 App Hosting 上,您的应用在 Cloud Run 上运行,其中文件系统位于内存中。写入其中的文件会占用为每个服务实例 (memoryMiB) 分配的内存,直到实例关停。如果您的应用在运行时呈现许多不同的页面(例如,具有在构建时未生成的参数的动态路由),则实例可能会超出其内存限制并重启。然后,Cloud Run 会记录 Memory limit of 512 MiB exceeded with 515 MiB used 等错误。如需了解详情,请参阅有关文件系统访问权限的 Cloud Run 文档。
将缓存保留在内存中
如需阻止 Next.js 将其缓存写入文件系统,请在 next.config.js 文件中将 experimental.isrFlushToDisk 设置为 false:
// @ts-check
/** @type {import('next').NextConfig} */
const nextConfig = {
experimental: {
isrFlushToDisk: false,
},
};
module.exports = nextConfig;
然后,Next.js 仅将缓存内容保留在内存中,最多可达 cacheMaxMemorySize(默认 50 MB),并在缓存已满时移除最近最少使用的条目。每个服务实例都有自己的缓存,当实例重启时,缓存会丢失。
创建一个包含这些更改的提交,并将其推送到活动分支。 然后,等待 App Hosting 发布完成。