| | import v8 from 'v8' |
| | import { info, warn } from '../../build/output/log' |
| | import { italic } from '../picocolors' |
| | import { startObservingGc } from './gc-observer' |
| | import { startPeriodicMemoryUsageTracing } from './trace' |
| |
|
| | export function enableMemoryDebuggingMode(): void { |
| | |
| | |
| | |
| | if ('setHeapSnapshotNearHeapLimit' in v8) { |
| | v8.setHeapSnapshotNearHeapLimit(1) |
| | } |
| |
|
| | |
| | |
| | |
| | v8.setFlagsFromString('--detect-ineffective-gcs-near-heap-limit') |
| |
|
| | |
| | |
| | process.on('SIGUSR2', () => { |
| | warn( |
| | `Received SIGUSR2 signal. Generating heap snapshot. ${italic( |
| | 'Note: this will take some time.' |
| | )}` |
| | ) |
| | v8.writeHeapSnapshot() |
| | }) |
| |
|
| | startObservingGc() |
| | startPeriodicMemoryUsageTracing() |
| |
|
| | warn( |
| | `Memory debugging mode is enabled. ${italic( |
| | 'Note: This will affect performance.' |
| | )}` |
| | ) |
| | info( |
| | ' - Heap snapshots will be automatically generated when the process reaches more than 70% of the memory limit and again when the process is just about to run out of memory.' |
| | ) |
| | info( |
| | ` - To manually generate a heap snapshot, send the process a SIGUSR2 signal: \`kill -SIGUSR2 ${process.pid}\`` |
| | ) |
| | info( |
| | ' - Heap snapshots when there is high memory will take a very long time to complete and may be difficult to analyze in tools.' |
| | ) |
| | info( |
| | ' - See https://nextjs.org/docs/app/building-your-application/optimizing/memory-usage for more information.' |
| | ) |
| | } |
| |
|