
TickProfiler
Server-only Valheim tick profiler exposing Update/FixedUpdate rate, stalls, CPU/GC stats, and ranked game/mod subsystem timing.MagiCorp Valheim Tick Profiler
Server-side BepInEx diagnostic plugin for Valheim dedicated servers.
What it reports
- Effective Unity
FixedUpdaterate versus configured nominal rate. - General
Updaterate. - Fixed/update gap average, p95, worst gap, and >20/>40/>100 ms stall counts.
- Process CPU use, managed memory and GC collections.
- Ranked self-time and inclusive-time for key Valheim subsystems:
- ZNet / ZDO replication
- ZNetScene / ZoneSystem / spawning
- AI and Character fixed updates
- ZSyncTransform / ZSyncAnimation
- item drops, projectiles, ships, fish
- building wear/support
- smelters / loot spawners / terrain
- Optional timing of Harmony Prefix/Postfix/Finalizer methods from other loaded BepInEx plugins, including ValheimPlus.
Instrumentation uses a thread-local nested timing stack, so tracked child time is removed from tracked parent self-time. This makes the ranked selfMsPerSec field useful for identifying the actual instrumented consumer instead of simply double-counting nested calls.
Output
BepInEx/LogOutput.log: compact periodic report.BepInEx/tickprofiler-latest.txt: most recent human-readable snapshot.BepInEx/tickprofiler-status.json: machine-readable current snapshot.
Touch BepInEx/tickprofiler.request to force an immediate snapshot. The plugin consumes and removes the request file.
Config
Created as BepInEx/config/magicorp.valheim.tickprofiler.cfg.
Important settings:
ReportIntervalSeconds = 10DeepGameProfiling = trueProfileModHarmonyMethods = trueTopConsumers = 12SpikeThresholdMs = 20
Build
Targets .NET Framework 4.8 and references the Valheim 1.0.12/BepInEx assemblies under /opt/valheim-port/reference-1.0.12 by default.
HOME=/root DOTNET_CLI_HOME=/root /opt/valheim-port/dotnet/dotnet build -c Release
The plugin does not change gameplay state. Installing or removing the DLL requires a normal BepInEx process start to load/unload it.

