perf: diagnoistics improvements
This commit is contained in:
@@ -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:');
|
||||
|
||||
Reference in New Issue
Block a user