Hầu hết các ứng dụng Next.js trên App Hosting đều có thể giữ nguyên các giá trị mặc định thông thường của Next.js.
Tuy nhiên, nếu các thực thể của bạn gặp lỗi Memory limit exceeded, bạn có thể cần đặt experimental.isrFlushToDisk: false để giữ bộ nhớ đệm trong bộ nhớ và ngăn các thực thể khởi động lại.
Theo mặc định, Next.js lưu trang và dữ liệu mà trang đó kết xuất vào bộ nhớ đệm trong thời gian chạy, chẳng hạn như
các trang được tạo bằng Tạo lại tĩnh gia tăng
(ISR),
phản hồi của trình xử lý tuyến và kết quả tìm nạp. Thư viện này lưu giữ các tệp trong bộ nhớ và cũng ghi các tệp đó vào thư mục .next của ứng dụng. Next.js không xoá các tệp này.
Trên App Hosting, ứng dụng của bạn chạy trên Cloud Run, nơi hệ thống tệp nằm trong bộ nhớ. Các tệp được ghi vào đó sẽ được tính vào bộ nhớ được phân bổ cho mỗi phiên bản phân phát (memoryMiB) cho đến khi phiên bản đó tắt. Nếu ứng dụng của bạn hiển thị nhiều trang riêng biệt trong thời gian chạy, ví dụ: các tuyến động có tham số không được tạo tại thời điểm xây dựng, thì các thực thể có thể vượt quá giới hạn bộ nhớ và khởi động lại. Sau đó, Cloud Run sẽ ghi lại lỗi như Memory limit of 512 MiB exceeded with 515 MiB used. Hãy xem tài liệu của Cloud Run về quyền truy cập vào hệ thống tệp để biết thông tin chi tiết.
Giữ bộ nhớ đệm trong bộ nhớ
Để ngăn Next.js ghi bộ nhớ đệm vào hệ thống tệp, hãy đặt experimental.isrFlushToDisk thành false trong tệp next.config.js:
// @ts-check
/** @type {import('next').NextConfig} */
const nextConfig = {
experimental: {
isrFlushToDisk: false,
},
};
module.exports = nextConfig;
Sau đó, Next.js chỉ lưu giữ nội dung đã lưu vào bộ nhớ đệm trong bộ nhớ, tối đa cacheMaxMemorySize (mặc định là 50 MB) và xoá các mục được sử dụng gần đây nhất khi bộ nhớ đệm đầy. Mỗi thực thể phân phát đều có bộ nhớ đệm riêng và bộ nhớ đệm này sẽ bị mất khi thực thể khởi động lại.
Tạo một thay đổi bao gồm những thay đổi này và đẩy thay đổi đó vào nhánh đang hoạt động. Sau đó, hãy đợi quá trình triển khai App Hosting hoàn tất.