Direct answer

A container CPU limit is a scheduler quota, not the physical processor clock speed. A server can be throttled even when the host still has spare CPU capacity.

How to check it

  1. If you have shell access inside the container, read cat /sys/fs/cgroup/cpu.max and cat /sys/fs/cgroup/cpu.stat; on cgroup v1 these paths differ.
  2. Compare nr_throttled and throttled_usec during an actual lag period, using two samples rather than one cumulative count.
  3. Record TPS/MSPT and a spark profile in the same window; distinguish low CPU entitlement from slow single-thread work.

What to change

cat /sys/fs/cgroup/cpu.max
cat /sys/fs/cgroup/cpu.stat
  1. Ask your host whether a per-container quota or shared CPU allocation applies; do not edit cgroup control files on a production host.
  2. Reduce competing tasks (builds, backups, world pre-generation) when the quota is exhausted.
  3. If throttling tracks player-visible lag, test a higher CPU allocation or plan on a host with more consistent CPU resources.

Software and version notes

Compatibility and safety

Linux cgroup v2 uses cpu.max for quota and cpu.stat counters. The cgroup path can be different in Docker, Kubernetes, panel hosting or cgroup v1; missing files are not proof of no limits.

Verify the result

Repeat under a comparable player load and check that throttled time stops increasing as quickly while MSPT or tick spikes improve.

References