perf: diagnoistics improvements

This commit is contained in:
2026-06-12 01:22:01 +02:00
parent 29032b5a36
commit dac5cb42a5
29 changed files with 1168 additions and 28 deletions

View File

@@ -80,36 +80,58 @@ function formatKb(kb) {
}
function summarize(entries) {
const latestHighMemory = [...entries].reverse().find((entry) => entry.type === 'high-memory');
const latestProcess = [...entries].reverse().find((entry) => entry.type === 'process');
const latestStore = [...entries].reverse().find((entry) => entry.type === 'store');
const latestComponents = [...entries].reverse().find((entry) => entry.type === 'components');
const latestHeap = [...entries].reverse().find((entry) => entry.type === 'heap');
const latestStore = latestHighMemory?.payload?.recentRendererSamples?.store
?? [...entries].reverse().find((entry) => entry.type === 'store')?.payload;
const latestComponents = latestHighMemory?.payload?.recentRendererSamples?.components
?? [...entries].reverse().find((entry) => entry.type === 'components')?.payload;
const latestHeap = latestHighMemory?.payload?.recentRendererSamples?.heap
?? [...entries].reverse().find((entry) => entry.type === 'heap')?.payload;
if (latestProcess) {
if (latestHighMemory?.payload?.summary) {
const summary = latestHighMemory.payload.summary;
console.log(`High memory threshold crossed: ${summary.totalWorkingSetGb} GB (threshold ${summary.thresholdGb} GB)`);
if (Array.isArray(summary.topProcesses) && summary.topProcesses.length > 0) {
console.log('Top processes:');
for (const process of summary.topProcesses.slice(0, 8)) {
console.log(` ${process.type} (pid ${process.pid}): ${formatKb(process.workingSetKb)} (${process.sharePercent}%)`);
}
}
} else if (latestProcess) {
console.log(`Process RSS total: ${formatKb(latestProcess.payload.totalWorkingSetKb)}`);
}
if (latestHeap) {
console.log(`Renderer JS heap: ${latestHeap.payload.usedJsHeapMb ?? 'n/a'} MB`);
console.log(`Renderer JS heap: ${latestHeap.usedJsHeapMb ?? 'n/a'} MB`);
}
if (latestStore?.payload?.domains) {
if (latestHighMemory?.payload?.mainProcessMemoryMb) {
const mainMemory = latestHighMemory.payload.mainProcessMemoryMb;
console.log(`Main process heap used: ${mainMemory.heapUsedMb ?? 'n/a'} MB`);
}
if (latestStore?.domains) {
console.log('Store domains (estimated bytes):');
for (const [domain, bytes] of Object.entries(latestStore.payload.domains).sort((a, b) => b[1] - a[1])) {
for (const [domain, bytes] of Object.entries(latestStore.domains).sort((a, b) => b[1] - a[1])) {
console.log(` ${domain}: ${bytes}`);
}
}
if (latestComponents?.payload?.domains) {
if (latestComponents?.domains) {
console.log('Live components by domain:');
for (const [domain, count] of Object.entries(latestComponents.payload.domains).sort((a, b) => b[1] - a[1])) {
for (const [domain, count] of Object.entries(latestComponents.domains).sort((a, b) => b[1] - a[1])) {
console.log(` ${domain}: ${count}`);
}
}
const leaks = latestComponents?.payload?.suspectedLeaks;
const leaks = latestComponents?.suspectedLeaks;
if (Array.isArray(leaks) && leaks.length > 0) {
console.log('Suspected component leaks:');