Blog>
Snippets

Memory Usage Tracking in SSR

Profile and keep track of memory usage during Server-Side Rendering (SSR) in a Next.js app to identify and prevent memory leaks.
import onFinished from 'on-finished';

export function trackMemoryUsage(req, res) {
  const startHeapUsed = process.memoryUsage().heapUsed;
  onFinished(res, (err) => {
    if (err) {
      console.error('Response failed', err);
    }
    const endHeapUsed = process.memoryUsage().heapUsed;
    const memoryUsed = endHeapUsed - startHeapUsed;
    console.log(`Memory used for this request: ${memoryUsed} bytes`);
  });
}
This code imports the 'on-finished' library which allows us to run a callback when the HTTP response has finished or closed. A function 'trackMemoryUsage' is defined which logs the difference in heap used memory from the beginning of the request until the response ends, helping to detect if a particular request is consuming abnormal amounts of memory, which might indicate a memory leak.
import { trackMemoryUsage } from './memoryUsageTracker';

export default function handler(req, res) {
  trackMemoryUsage(req, res);
  // ... your SSR logic here ...
  res.end('Page rendered');
}
This code shows how to use the 'trackMemoryUsage' function in an SSR request handler. The function is imported and then called, passing in the `req` and `res` objects which are the request and response objects in a Next.js API route or a custom server setup. After the memory tracking is setup, you can place your server-side logic and finally end the response.