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 推出作業完成。