UNPKG

next

Version:

The React Framework

109 lines (108 loc) 4.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 0 && (module.exports = { getAllMemoryUsageSpans: null, startPeriodicMemoryUsageTracing: null, stopPeriodicMemoryUsageTracing: null, traceMemoryUsage: null }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { getAllMemoryUsageSpans: function() { return getAllMemoryUsageSpans; }, startPeriodicMemoryUsageTracing: function() { return startPeriodicMemoryUsageTracing; }, stopPeriodicMemoryUsageTracing: function() { return stopPeriodicMemoryUsageTracing; }, traceMemoryUsage: function() { return traceMemoryUsage; } }); const _v8 = /*#__PURE__*/ _interop_require_default(require("v8")); const _log = require("../../build/output/log"); const _trace = require("../../trace"); const _picocolors = require("../picocolors"); const _path = require("path"); const _shared = require("../../trace/shared"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const HEAP_SNAPSHOT_THRESHOLD_PERCENT = 70; let alreadyGeneratedHeapSnapshot = false; const TRACE_MEMORY_USAGE_TIMER_MS = 20000; let traceMemoryUsageTimer; const allMemoryUsage = []; function startPeriodicMemoryUsageTracing() { traceMemoryUsageTimer = setTimeout(()=>{ traceMemoryUsage('periodic memory snapshot'); startPeriodicMemoryUsageTracing(); }, TRACE_MEMORY_USAGE_TIMER_MS); } function stopPeriodicMemoryUsageTracing() { if (traceMemoryUsageTimer) { clearTimeout(traceMemoryUsageTimer); } } function getAllMemoryUsageSpans() { return allMemoryUsage; } function traceMemoryUsage(description, parentSpan) { const memoryUsage = process.memoryUsage(); const v8HeapStatistics = _v8.default.getHeapStatistics(); const heapUsed = v8HeapStatistics.used_heap_size; const heapMax = v8HeapStatistics.heap_size_limit; const tracedMemoryUsage = { 'memory.rss': memoryUsage.rss, 'memory.heapUsed': heapUsed, 'memory.heapTotal': memoryUsage.heapTotal, 'memory.heapMax': heapMax }; allMemoryUsage.push(tracedMemoryUsage); const tracedMemoryUsageAsStrings = Object.fromEntries(Object.entries(tracedMemoryUsage).map(([key, value])=>[ key, String(value) ])); if (parentSpan) { parentSpan.traceChild('memory-usage', tracedMemoryUsageAsStrings); } else { (0, _trace.trace)('memory-usage', undefined, tracedMemoryUsageAsStrings); } if (process.env.EXPERIMENTAL_DEBUG_MEMORY_USAGE) { const percentageHeapUsed = 100 * heapUsed / heapMax; (0, _log.info)(''); (0, _log.info)('***************************************'); (0, _log.info)(`Memory usage report at "${description}":`); (0, _log.info)(` - RSS: ${(memoryUsage.rss / 1024 / 1024).toFixed(2)} MB`); (0, _log.info)(` - Heap Used: ${(heapUsed / 1024 / 1024).toFixed(2)} MB`); (0, _log.info)(` - Heap Total Allocated: ${(memoryUsage.heapTotal / 1024 / 1024).toFixed(2)} MB`); (0, _log.info)(` - Heap Max: ${(heapMax / 1024 / 1024).toFixed(2)} MB`); (0, _log.info)(` - Percentage Heap Used: ${percentageHeapUsed.toFixed(2)}%`); (0, _log.info)('***************************************'); (0, _log.info)(''); if (percentageHeapUsed > HEAP_SNAPSHOT_THRESHOLD_PERCENT) { const distDir = _shared.traceGlobals.get('distDir'); const heapFilename = (0, _path.join)(distDir, `${description.replace(' ', '-')}.heapsnapshot`); (0, _log.warn)((0, _picocolors.bold)(`Heap usage is close to the limit. ${percentageHeapUsed.toFixed(2)}% of heap has been used.`)); if (!alreadyGeneratedHeapSnapshot) { (0, _log.warn)((0, _picocolors.bold)(`Saving heap snapshot to ${heapFilename}. ${(0, _picocolors.italic)('Note: this will take some time.')}`)); _v8.default.writeHeapSnapshot(heapFilename); alreadyGeneratedHeapSnapshot = true; } else { (0, _log.warn)('Skipping heap snapshot generation since heap snapshot has already been generated.'); } } } } //# sourceMappingURL=trace.js.map