Skip to content

sys_ticrate and server FPS on a CS 1.6 server

sys_ticrate sets the most frames a second the server runs, 100 by default. How to set it, how to read the real FPS with stats, and what keeps it below the target.

Last checked
Steps
5
Reading time
3 min
On Hostsrc
Includes the steps for a Hostsrc server

sys_ticrate sets the most frames a second a CS 1.6 server runs. In each frame the server reads players' commands, runs the game and sends updates. The engine default is 100. In CS 1.6, "tickrate" and "server FPS" mean the same thing.

The value is a ceiling, not a promise. The server runs up to that many frames only while its CPU, its -pingboost mode and its plugins keep up. Check the real figure with stats in the server console.

On Hostsrc

You choose a target from 1000 to 1500 in the control panel, and it sets the server's sys_ticrate. The FPS you actually get depends on the plan, map, plugins and active player count.

Before you start

  • Access to the server console.
  • Players on the server when you measure. An empty server runs much lighter frames than a full one.

Steps

  1. Step 1: See the current value

    Type sys_ticrate in the server console. It prints the value the server aims for now.

    Console
    sys_ticrate
  2. Step 2: Set the target

    On your own server, put sys_ticrate in server.cfg, or on the start line as +sys_ticrate 1000. A -sys_ticrate 1000 start option takes priority: the server then uses that number and ignores the setting.

    On Hostsrc, set the FPS target in the control panel instead of your own line, so the two never disagree.

    cstrike/server.cfg
    sys_ticrate 1000
  3. Step 3: Check the FPS you really get

    Type stats in the server console. The FPS column is the server's frame rate at that moment. Run it several times over a few minutes, at a busy time, because it changes from frame to frame.

    On xHLDS, xhlds_stats gives the frame rate, frame times and late frames for a whole window, which is easier to read than single stats lines.

    CPU   In    Out   Uptime  Users   FPS    Players
  4. Step 4: Find what holds it back

    When the FPS stays well below the target, the server can't finish its frames in time, or wakes up too late for the next one. Look at these, in order:

    • The -pingboost mode, which decides how the server waits between frames. The -pingboost guide covers it.
    • Plugins that do work in every frame, and maps with many entities.
    • The CPU time the server gets. On a shared node, that depends on how busy the other servers are and on the server's priority.

    On xHLDS, xhlds_stats profile shows where the frame time goes, part by part and game function by game function.

  5. Step 5: Keep the players' update rates in mind

    Players don't get one update per server frame. Each gets as many world updates a second as their cl_updaterate asks for, between the server's sv_minupdaterate and sv_maxupdaterate, and within their rate. A higher sys_ticrate shortens the wait before the server handles a player's command, but it doesn't send more updates than those settings allow.

Settings that work together

Engine defaults from the ReHLDS source, which keeps HLDS's. Checked 24 October 2026.
  • Setting: sys_ticrate

    What it does
    The most frames a second the server runs
    Default
    100
  • Setting: -sys_ticrate

    What it does
    A start option that overrides sys_ticrate
    Default
    Not set
  • Setting: -pingboost

    What it does
    How the server waits between frames, on Linux
    Default
    Not set
  • Setting: sv_maxupdaterate

    What it does
    The most world updates a second a player gets
    Default
    30
  • Setting: sv_minupdaterate

    What it does
    The fewest world updates a second a player gets
    Default
    10

Is a higher FPS always better?

A higher frame rate means shorter frames, so the server handles each command sooner after it arrives. It also costs more CPU. When the CPU can't keep up, the real FPS falls below the target and changes from frame to frame. A steady rate you can hold is worth more than a high target you can't, so measure before and after each change.

Troubleshooting

stats shows less FPS than my sys_ticrate

The server can't keep up with the target, or doesn't wake up in time. Check the -pingboost mode, then the plugins and the map, at the same player count. If a -sys_ticrate start option is set, it overrides the value you changed.

What sys_ticrate should I use?

On Hostsrc, a target from 1000 to 1500, the range the control panel offers. On your own server, start at 1000 and raise it only while stats keeps up with players on.

Is server FPS the same as fps_max?

No. fps_max limits frames on the player's computer. sys_ticrate limits frames on the server.

My change to sys_ticrate didn't stick

Another config, or a -sys_ticrate start option, sets it again. A value in server.cfg is read at each map change, so a line further down the file, or in a config a plugin runs, wins over it.