-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
Save this as src/poc.ts.
import { fileURLToPath } from 'url';
import { join } from 'path';
import { createApplication, Response } from '@nbit/bun';
const __dirname = fileURLToPath(new URL('.', import.meta.url));
const { defineRoutes, attachRoutes, createRequestHandler } = createApplication({
root: join(__dirname, '..'),
allowStaticFrom: ['assets'],
});
const memoryLeak = () => Response.file('assets/poc.html');
const noMemoryLeak = () => `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Vote</title>
</head>
<body>
<span>Hello world</span>
</body>
</html>`;
const routes = defineRoutes((app) => [app.get('/memory-leak', memoryLeak), app.get('/no-memory-leak', noMemoryLeak)]);
const port = 3000;
Bun.serve({
port,
fetch: attachRoutes(routes),
});
console.log(`Server running at http://localhost:${port}`);
const formatMemoryUsage = (usage: number) => `${Math.round(usage / 1024 / 1024 * 100) / 100} MB`;
setInterval(() => {
const memoryData = process.memoryUsage();
const memoryUsage = {
rss: formatMemoryUsage(memoryData.rss),
heapTotal: formatMemoryUsage(memoryData.heapTotal),
heapUsed: formatMemoryUsage(memoryData.heapUsed),
external: formatMemoryUsage(memoryData.external),
};
console.log(memoryUsage);
}, 1_000);Save this as assets/poc.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Vote</title>
</head>
<body>
<span>Hello world</span>
</body>
</html>Start the server in one terminal with bun run ./src/poc.ts and then in a second terminal start the benchmark with bunx autocannon http://localhost:3000/no-memory-leak -c 1000
Notice a small memory increase but then it stabilises. You can run this as many time as you want after this and the memory will barely move a few MB if that.
If you now run bunx autocannon http://localhost:3000/memory-leak -c 1000 you'll see the memory creeps up into the 100s of MB and stays there. Every time you re-run it you'll keep seeing more and more memory usage.
Metadata
Metadata
Assignees
Labels
No labels