* Performance under memory pressure
()
| 568 | * Performance under memory pressure |
| 569 | */ |
| 570 | async function testMemoryPressure () { |
| 571 | console.log("🔥 Memory Pressure Test"); |
| 572 | console.log("-".repeat(50)); |
| 573 | |
| 574 | const monitor = new MemoryMonitor(); |
| 575 | |
| 576 | monitor.snapshot("Initial state"); |
| 577 | |
| 578 | // Create memory pressure |
| 579 | const largeObjects = []; |
| 580 | for (let i = 0; i < 100; i++) { |
| 581 | largeObjects.push({ |
| 582 | id: i, |
| 583 | data: new Array(10000).fill(0).map((_, j) => ({ |
| 584 | index: j, |
| 585 | value: Math.random(), |
| 586 | text: `Large text content for item ${i}-${j}`.repeat(10) |
| 587 | })) |
| 588 | }); |
| 589 | } |
| 590 | |
| 591 | monitor.snapshot("After creating memory pressure"); |
| 592 | |
| 593 | // Now test server performance under pressure |
| 594 | const server = tenso({ |
| 595 | silent: true, |
| 596 | logging: { enabled: false }, |
| 597 | rate: { enabled: true, limit: 1000 } |
| 598 | }); |
| 599 | |
| 600 | server.get("/test", (req, res) => { |
| 601 | res.send({ message: "Hello", data: largeObjects[0] }); // Reference large object |
| 602 | }); |
| 603 | |
| 604 | // Process requests under memory pressure |
| 605 | for (let i = 0; i < 200; i++) { |
| 606 | const req = { |
| 607 | method: "GET", |
| 608 | url: "/test", |
| 609 | headers: { accept: "application/json" }, |
| 610 | parsed: { searchParams: new URLSearchParams() }, |
| 611 | server: server, |
| 612 | sessionID: `pressure-session-${i}` |
| 613 | }; |
| 614 | |
| 615 | const res = { |
| 616 | statusCode: 200, |
| 617 | headers: {}, |
| 618 | getHeader: name => res.headers[name], |
| 619 | removeHeader: name => delete res.headers[name], |
| 620 | header: (name, value) => res.headers[name] = value, // eslint-disable-line no-return-assign |
| 621 | getHeaders: () => res.headers |
| 622 | }; |
| 623 | |
| 624 | server.render(req, res, largeObjects[i % largeObjects.length]); |
| 625 | server.rateLimit(req); |
| 626 | } |
| 627 |