The stat Commands Cheatsheet
The stat commands are UE's first-line performance overlay — faster than Insights, no symbol setup, instant feedback. This page is a categorized reference of every perf-relevant stat command, what each one shows, and when to reach for it. Bookmark and grep.
CPU / Frame Timing
First-pass triage for any frame-time issue. Start with stat unit; everything else drills in.
| Command | Shows | When to use |
|---|---|---|
stat fps | FPS + ms color-coded | First glance health check |
stat unit | Frame, Game (CPU), Draw (RT), GPU, RHIT in ms; in 5.6 also resolution | Default starting point — identifies bound thread |
stat unitgraph | stat unit + scrolling per-thread graph | Walk through scene, spot heavy regions |
stat unitmax | Adds rolling max to stat unit | Stress runs where peaks matter |
stat game | STATGROUP_Game — tick, AI, anim, physics, scripting | Game thread bound — find which system |
stat slow | Items above an ms threshold (-ms=) | Hunt outlier scopes |
stat scenerendering | Draw calls, mesh draw commands, primitives, init views | Draw thread bound — render culprit |
stat rhi | RHI memory, draw primitive counts | RHI thread bound or VRAM tracking |
stat namedevents | Enables SCOPED_NAMED_EVENT traces | Insights drilling — NOT for measuring frame time (~20% overhead) |
GPU / Rendering
When stat unit shows GPU bound. stat gpu in 5.6 splits Graphics and Compute queues.
| Command | Shows | When to use |
|---|---|---|
stat gpu | Per-pass GPU ms; 5.6 splits Graphics/Compute | GPU bound — find heaviest pass |
stat scenerendering | (see CPU) | Cross-check draw counts |
stat initviews | Visibility culling timing | Many cheap actors — culling cost dominates |
stat lumen (and LumenScene, LumenReflections, LumenGI) | Lumen pass timings | Lumen suspected bottleneck — see Lumen tutorial |
stat nanite (and NaniteRaster, NaniteShading) | VisBuffer rasterize, materials, instances | Nanite-heavy scenes — see Nanite tutorial |
stat virtualshadowmap | VSM page allocation, invalidations | Diagnose VSM cost — see VSM tutorial |
stat raytracing | RT scene build/dispatch timings | HWRT enabled (Lumen HWRT, RT shadows) |
ProfileGPU | Single-frame GPU pass dump | Localize regression to a pass before deeper tools |
Memory
For OOM crashes, streaming pool warnings, or slow growth. See Memory Insights tutorial for the deeper workflow.
| Command | Shows | When to use |
|---|---|---|
stat memory | Memory by subsystem (physical, virtual, texture, mesh) | Quick on-HUD memory snapshot |
stat llm | LLM per-tag (requires -llm launch) | Authoritative budget tracking |
stat llmfull | Full per-category LLM breakdown | Deep memory audit |
stat streaming | Texture pool used / wanted / budget | Pop-in, low-res textures |
stat texturegroup | Per-LODGroup memory and counts | Per-group budget validation |
memreport -full | Full snapshot to file | Pre/post comparison for leak hunting |
obj list class=Texture2D | Live UObjects of a class | Class-filtered memory audit |
Networking
For multiplayer titles. See the Networking & Replication tutorial.
| Command | Shows | When to use |
|---|---|---|
stat net | NetTickTime, NetBroadcastTickTime, replication graph counts | Multiplayer perf check |
stat netpacket | Per-packet sizes/counts | Granular bandwidth analysis |
dumpnet | Connections, channels, actor replicators | Diagnose stuck/spammy replication |
net.Debug.ActorClassNameTypeCSV 1 (5.6+) | Per-class CSV stats for ForceNetUpdate / FlushNetDormancy | Dormancy regression early-warning |
Animation
For skeletal-mesh-heavy frames. See the Animation Performance tutorial.
| Command | Shows | When to use |
|---|---|---|
stat anim | STATGROUP_Anim — eval/update cost per skeletal mesh | High character count / heavy AnimBP |
stat animationgraphs | AnimGraph node-level cost | ABP suspected — drill into nodes |
stat skinnedmesh | Skinning, cloth, LOD selection | Many skinned meshes on screen |
Physics
For Chaos-bound frames. See the Chaos Physics tutorial.
| Command | Shows | When to use |
|---|---|---|
stat physics | Broadphase, narrowphase, solver | Physics-bound frames |
stat chaos | Chaos solver/island/destruction stats | UE5 Chaos solver work |
stat chaoscloth | Cloth-specific timing | Cloth perf investigation |
Niagara / FX
See the Niagara Performance tutorial.
| Command | Shows | When to use |
|---|---|---|
stat niagara | Emitter/system tick + render | FX-heavy scenes |
stat NiagaraOverview | System counts, active particles | Quick triage |
fx.Niagara.Debug.Hud | On-screen Niagara debug HUD | Inspect specific systems |
Levels / Tick / Actors
| Command | Shows | When to use |
|---|---|---|
stat levels | Streaming-level state list | World Partition / level streaming debug |
dumpticks | All actors with registered tick | Hunt unnecessary bCanEverTick=true |
dumpticks grouped | Same, grouped by class | Aggregate offenders |
LogActorCounts | Total / dynamic / ticked actors | Quick world census |
ListSpawnedActors | All dynamic actors | Memory leak / runtime spawn audit |
Hidden Gems
Less-known but powerful. The stat dump* family especially.
| Command | Purpose |
|---|---|
stat dumpframe -ms=0.001 -root=shadow | One-frame dump filtered by ms + stat root — surgical bottleneck hunt |
stat dumpave -num=30 | Average over N frames — far less noisy than single-frame |
stat dumpmax / stat dumpsum | Peak / cumulative over capture window |
stat dumphitches | Logs only frames over hitch threshold (t.HitchFrameTimeThreshold) |
stat dumpevents | Cross-thread slow-event history |
stat startfile / stat stopfile | Capture .uestats to disk (legacy — Insights preferred in 5.5+) |
stat hier -ms=0.5 | Hierarchical view filtered by ms — "I don't know where to look" command |
stat group list / enable / disable | Manage which groups record (not just display) |
DumpConsoleCommands | Dumps every command + CVar — best discovery |
FreezeRendering | Freeze frustum, fly camera — verify culling visually |
Trace.RegionBegin "Combat" / RegionEnd | (5.5+) Tag a window in Insights without code changes |
ListShaders (5.6+) | Runtime shader memory analysis |
stat unit Display Reference
Reading stat unit like a senior. Each line maps to a thread; whichever ≈ Frame is your bound thread.
| Line | Meaning | Bound when… |
|---|---|---|
| Frame | Total wall-clock per frame | Always present — your overall budget |
| Game | Game thread time — ticks, AI, gameplay, BP, anim update, physics dispatch | Game ≈ Frame → game thread bound; optimize C++/BP/ticks |
| Draw | Render thread — visibility culling, mesh draw command building, RHI command list build | Draw ≈ Frame → render thread bound; reduce primitives, draw calls, dynamic shadows |
| GPU | GPU work; 5.6 stat gpu splits Graphics + Compute | GPU ≈ Frame → GPU bound; profile with stat gpu / ProfileGPU |
| RHIT | RHI Thread (D3D12/Vulkan/Metal command translation) | High RHIT → driver/API submission bottleneck |
| DynRes | Current dynamic resolution scale (only with DynRes active) | <100% → GPU pressure triggered downscale |
| Resolution | (UE 5.6+) Current render resolution | Always — documentation context |
stat unitgraph overlays a scrolling line per thread (Frame=white, Game=yellow, Draw=cyan, GPU=red typically). Spikes on a single colored line tell you which thread spiked.
stat startfile / stat stopfile still work, but .uestats viewing in the editor is being phased out. Insights traces are the supported path — trace.start / trace.stop + Trace.RegionBegin/End for window markers.
stat unit— identify bound threadstat unitgraph— spot the spikestat hier -ms=0.5— hierarchical breakdownstat <category>— specific subsystem (game/scenerendering/gpu/anim/physics)stat dumpave -num=30— gather evidence