Hi, we deploy our nextjs project with SSG. I have spent 2 days investigating slow start on deployed project.
Currently it starts with 3 seconds. Then it works with 500 ms, which is fine. But later function had the same init with 3 seconds again.
May 24, 02:02:34 PM: b8d94f55 INFO info - Loaded env from /var/task/.env
May 24, 02:02:34 PM: b8d94f55 INFO [GET] / (SSR)
May 24, 02:02:38 PM: b8d94f55 Duration: 3210.38 ms Memory Usage: 143 MB Init Duration: 212.93 ms
May 24, 02:07:04 PM: 1f252944 INFO [GET] / (SSR)
May 24, 02:07:05 PM: 1f252944 Duration: 508.80 ms Memory Usage: 145 MB
May 24, 02:45:55 PM: c766cbab INFO info - Loaded env from /var/task/.env
May 24, 02:45:55 PM: c766cbab INFO [GET] / (SSR)
May 24, 02:45:59 PM: c766cbab Duration: 3214.84 ms Memory Usage: 143 MB Init Duration: 209.58 ms
May 24, 04:05:51 PM: ba961469 INFO info - Loaded env from /var/task/.env
May 24, 04:05:51 PM: ba961469 INFO [GET] / (SSR)
May 24, 04:05:55 PM: ba961469 Duration: 3146.45 ms Memory Usage: 142 MB Init Duration: 212.01 ms
May 24, 04:05:55 PM: a89812a0 INFO [GET] / (SSR)
May 24, 04:05:55 PM: a89812a0 Duration: 422.96 ms Memory Usage: 144 MB
I guess function is shutdowning itself. And then reinit on a request.
Can I somehow save init cache or prevent it from shutdowning?
Unfortunately, that’s not something AWS Lambda supports at the moment (we use AWS Lambda for Netlify Functions). The containers are short-lived and are terminated in a short time once the code has been executed.
What can I do to reduce cold start? Can we make AWS Lambda warm on init?
Sadly, not. As I said, Lambda is not meant to provide the feature you’re looking for.
You can try using an experimental feature: Edge Functions to see if it changes anything. To enable that, you’d have to add an environment variable: NEXT_USE_NETLIFY_EDGE = true
.
Nothing changed after NEXT_USE_NETLIFY_EDGE
.
After half an hour after deploy it still loads slowly.
May 30, 12:07:30 PM: 6aa84792 INFO info - Loaded env from /var/task/.env
May 30, 12:07:30 PM: 6aa84792 INFO [GET] / (SSR)
May 30, 12:07:33 PM: 6aa84792 Duration: 2914.83 ms Memory Usage: 143 MB Init Duration: 204.94 ms
May 30, 12:08:02 PM: 1422ce36 INFO [GET] / (SSR)
May 30, 12:08:03 PM: 1422ce36 Duration: 411.57 ms Memory Usage: 148 MB
May 30, 12:08:04 PM: 433dda0a INFO [GET] / (SSR)
May 30, 12:08:04 PM: 433dda0a Duration: 523.16 ms Memory Usage: 160 MB
May 30, 12:08:06 PM: d7b43785 INFO [GET] / (SSR)
May 30, 12:08:06 PM: d7b43785 Duration: 406.74 ms Memory Usage: 162 MB
May 30, 12:09:26 PM: e99460ca INFO [GET] / (SSR)
May 30, 12:09:27 PM: e99460ca Duration: 467.55 ms Memory Usage: 162 MB
May 30, 12:46:11 PM: a8aa2de0 INFO info - Loaded env from /var/task/.env
May 30, 12:46:11 PM: a8aa2de0 INFO [GET] / (SSR)
May 30, 12:46:15 PM: a8aa2de0 Duration: 3158.90 ms Memory Usage: 142 MB Init Duration: 198.06 ms
Unfortunately, in that case that’s just expected behaviour. AWS Lambda needs time to cold start and Next.js on Netlify makes use of Lambda to work.