diff --git a/apps/server/src/diagnostics/ProcessDiagnostics.ts b/apps/server/src/diagnostics/ProcessDiagnostics.ts index b39d560a228..8127f9e8138 100644 --- a/apps/server/src/diagnostics/ProcessDiagnostics.ts +++ b/apps/server/src/diagnostics/ProcessDiagnostics.ts @@ -443,11 +443,11 @@ function readWindowsProcessRows(): Effect.Effect< ChildProcessSpawner.ChildProcessSpawner > { const command = [ - "$processes = Get-CimInstance Win32_Process | ForEach-Object {", - '$perf = Get-CimInstance Win32_PerfFormattedData_PerfProc_Process -Filter "IDProcess = $($_.ProcessId)" -ErrorAction SilentlyContinue;', - "[pscustomobject]@{ ProcessId = $_.ProcessId; ParentProcessId = $_.ParentProcessId; Name = $_.Name; CommandLine = $_.CommandLine; Status = $_.Status; WorkingSetSize = $_.WorkingSetSize; PercentProcessorTime = if ($perf) { $perf.PercentProcessorTime } else { 0 } }", - "};", - "$processes | ConvertTo-Json -Compress -Depth 3", + "$perfData=@{};Get-CimInstance Win32_PerfFormattedData_PerfProc_Process -ErrorAction SilentlyContinue|ForEach-Object{$perfData[$_.IDProcess]=$_};", + "Get-CimInstance Win32_Process|ForEach-Object{", + "$perf=$perfData[$_.ProcessId];", + "[pscustomobject]@{ProcessId=$_.ProcessId;ParentProcessId=$_.ParentProcessId;Name=$_.Name;CommandLine=$_.CommandLine;Status=$_.Status;WorkingSetSize=$_.WorkingSetSize;PercentProcessorTime=if($perf){$perf.PercentProcessorTime}else{0}}", + "}|ConvertTo-Json -Compress -Depth 3", ].join(" "); return runProcess({ diff --git a/apps/server/src/diagnostics/ProcessResourceMonitor.test.ts b/apps/server/src/diagnostics/ProcessResourceMonitor.test.ts index d9c4eb06ef1..b718c15e6cd 100644 --- a/apps/server/src/diagnostics/ProcessResourceMonitor.test.ts +++ b/apps/server/src/diagnostics/ProcessResourceMonitor.test.ts @@ -118,8 +118,8 @@ describe("ProcessResourceMonitor", () => { expect(result.topProcesses).toHaveLength(1); expect(result.topProcesses[0]?.avgCpuPercent).toBe(20); expect(result.topProcesses[0]?.maxCpuPercent).toBe(30); - expect(result.topProcesses[0]?.cpuSecondsApprox).toBe(2); - expect(result.totalCpuSecondsApprox).toBe(2); + expect(result.topProcesses[0]?.cpuSecondsApprox).toBe(6); + expect(result.totalCpuSecondsApprox).toBe(6); expect(result.buckets.some((bucket) => bucket.maxCpuPercent === 30)).toBe(true); }), ); diff --git a/apps/server/src/diagnostics/ProcessResourceMonitor.ts b/apps/server/src/diagnostics/ProcessResourceMonitor.ts index 6030e4172e1..65d442ab431 100644 --- a/apps/server/src/diagnostics/ProcessResourceMonitor.ts +++ b/apps/server/src/diagnostics/ProcessResourceMonitor.ts @@ -17,7 +17,7 @@ import * as ChildProcessSpawner from "effect/unstable/process/ChildProcessSpawne import * as ProcessDiagnostics from "./ProcessDiagnostics.ts"; -const SAMPLE_INTERVAL_MS = 5_000; +const SAMPLE_INTERVAL_MS = 15_000; const RETENTION_MS = 60 * 60_000; const MAX_RETAINED_SAMPLES = 20_000;