This page lets you control how much CPU, memory, and disk I/O a virtual server owner can use. Limits apply to the Unix user that owns this virtual server and all sub-servers, so they affect SSH logins, cron jobs, scripts, and most server-side processes that run as that user. Virtualmin provides two types of limits: user-based limits that use systemd user slices (cgroups v2) to cap total usage across all processes, and process-based limits that use `limits.conf` to restrict each individual process.

The available user-based limit types are:

- `CPUQuota` and `CPUWeight` to cap CPU use and/or set CPU priority compared to other users.
- `MemoryMax` to set a hard memory ceiling for all processes combined, and `MemoryHigh` to start throttling memory use before the hard limit.
- `MemorySwapMax` to limit how much swap (disk-backed memory) the user’s processes can use.
- `TasksMax` to cap the total number of processes and threads.
- `IOReadBandwidthMax` / `IOWriteBandwidthMax` to cap disk bandwidth, and `IOReadIOPSMax` / `IOWriteIOPSMax` to cap I/O operations per second. These limits apply per block device.
- `IOWeight` to set disk I/O priority compared to other users.

The available process-based limit types are:

- Maximum number of processes: prevents starting more processes than allowed for the user.
- Maximum size per process: kills any single process that exceeds the limit, but does not cap total memory across all processes.
- Maximum CPU time per process: kills any process whose CPU time exceeds the limit.