TEAM FORTRESS 2 · SERVER TROUBLESHOOTING · NOVEMBER 2026

How to Troubleshoot a Team Fortress 2 Dedicated Server

When a TF2 dedicated server will not start, crashes on launch or refuses connections, the console usually names the cause. Here is how to separate those failures, read the useful lines and fix the ones that have a documented cause.

Read the console first

The launch window tells you whether the server bound a port, failed to load a library or never received a map.

Crashes have distinct causes

A 64-bit replay_srv.so fault, a bad default map and damaged files each leave a different trail.

Connection is not matchmaking

This guide is about your own srcds server, not Valve Casual matchmaking. Browser listing needs a token made for App ID 440.

Lag is a different job

If the process stays up and players can join, but the game feels late or muddy, switch to the lag guide instead of repeating crash fixes.

Name the failure before you change anything

A TF2 dedicated server fails in a small number of ways, and each one points to a different fix. Mixing them up is how people end up recreating a Game Server Login Token for a crash, or reinstalling SourceMod because friends cannot see the server in the browser.

This page is for the server you run yourself or rent: the Source dedicated server, installed as app ID 232250 and launched with srcds. It is not a guide to Valve’s Casual matchmaking. If your own box will not stay up, will not list or will not accept joins, work through the questions below. If you still need to install the server from scratch, use our TF2 dedicated server setup guide first.

What kind of TF2 server failure is this?
The dedicated server is misbehaving
Does the process exit, restart itself or print a fatal error?
Yes
CrashRead the console and debug.log. The usual trails are replay_srv.so, a bad map or damaged files.
No
Does it never reach the network bind line?
Yes
Launch failureCheck +map, the 32-bit libraries on Linux and that force_install_dir comes before login.
No
Does it stay up, but players cannot find or join it?
Yes
ConnectionTest connect IP:port, then the App ID 440 token, sv_lan 0 and UDP 27015.
No
Players can join, but the game feels late or muddy: use the TF2 lag guide instead
Name the failure first. A crash, a launch fault and a listing problem each need a different first check.

Use this table as the short version of the same split.

What you see What it usually is Where to start
The process never stays running, or exits before a map loads Launch failure The console for a missing +map, a missing library or a bad launch line
The server starts, then dies with a segmentation fault or a fatal load error Crash debug.log, then the replay_srv.so message, the chosen map and a SteamCMD verify
The server stays up, but it is missing from the browser or friends cannot join Connection or listing The token, sv_lan 0, UDP 27015 and a direct connect test
Players join, then complain about warping, choke or shots that do not count Lag or hit registration The TF2 lag guide, not this page

How to read the TF2 server console

TF2 prints the reason it failed more often than it hides it. Launch with -console so you can see the output, and add -debug on Linux if the process is dying: srcds_run and srcds_run_64 will write a debug.log you can read after a crash. The useful lines are short and specific.

The console lines that actually diagnose a TF2 server
Read down until you hit a fatal error or the network bind line
No map specified
WARNING: No map specified!
Server may not heartbeat.
Add +map ctf_2fort
64-bit replay fault
wrong ELF class: ELFCLASS32
FATAL ERROR: Could not load: replay_srv.so
Install 64-bit libcurl-gnutls
Healthy bind
Network: IP, mode MP, dedicated Yes,
ports 27015 SV / 27005 CL
Use that IP and port to join
How to capture more detail
  • Launch with -console so the window stays visible
  • Add -debug on Linux to write debug.log
  • Ignore a lone SteamAPI_Init line unless a fatal error follows
srcds_run prints “Add -debug … to generate a debug.log” after a crash.
These three lines cover most “it will not start” reports. A bind line means the process itself came up.

A healthy start prints a network bind line in this form: Network: IP, mode MP, dedicated Yes, ports 27015 SV / 27005 CL. That line tells you the address and game port the process actually bound to. If friends are connecting to a different port than the one in that line, the server is fine and the join address is wrong.

WARNING: No map specified! Server may not heartbeat. is the server telling you it has nothing to run. Always launch with +map ctf_2fort or another map that exists in tf/maps, or with +randommap. Without a map, the server may stay alive in a useless state and will not advertise itself properly.

Two other messages are easy to misread. WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5 is about readline in the console, not about the game itself. SteamAPI_Init failures on Linux are also common and are not fatal on their own. Keep reading until you hit a fatal error, a segmentation fault or the network bind line.

Fix launch failures

A launch failure means the process never becomes a joinable game. The most common causes sit on the launch line or in the install, not in server.cfg.

Start with a map that actually exists

If the console warns that no map was specified, add +map and use the map name without .bsp. ctf_2fort is the usual test map because it ships with the server. If you set a custom default map in a host panel, the name must match a file in tf/maps exactly. Nodecraft’s TF2 notes treat a mis-configured default map, or damaged server files, as a typical cause of a segmentation fault on start, so a panel field that still points at an old or renamed map is worth checking before you rebuild the whole install.

Use the matching launcher

Since Valve’s 18 April 2024 update, TF2 has 64-bit server support on Windows and Linux. The 64-bit launchers are srcds_run_64 on Linux and srcds_win64.exe on Windows. The older 32-bit launchers are srcds_run and srcds.exe. Pick one architecture and stay on it. A 64-bit process cannot load 32-bit Metamod, SourceMod or plugin binaries, and the reverse is also true: the addons simply fail to load.

./srcds_run_64 -console -game tf -debug +map ctf_2fort +maxplayers 24 +sv_setsteamaccount YOURTOKEN

-game tf points srcds at Team Fortress 2 rather than another Source game. +maxplayers can go up to 32 in the normal supported setup. There is an -unrestricted_maxplayers option that allows more, but Valve marks it unsupported and notes stability issues at maximum players, so it is a poor thing to add while you are already chasing a crash.

Install the libraries Linux still expects

On a 64-bit Debian or Ubuntu host, TF2 still needs 32-bit compatibility libraries even if you plan to run the 64-bit server. A segmentation fault immediately on start is often this missing layer rather than a “broken” TF2 build. The usual set is:

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install lib32z1 libncurses5:i386 libbz2-1.0:i386 lib32gcc-s1 lib32stdc++6 libtinfo5:i386 libcurl3-gnutls:i386 libsdl2-2.0-0:i386

Some newer releases no longer ship libtinfo5:i386 or libncurses5:i386. If the package manager refuses those two, that is a distro packaging issue, not a sign that TF2 itself failed to install.

Put SteamCMD’s install path in the right place

SteamCMD itself warns Please use force_install_dir before logon! if the install directory is set too late. Put +force_install_dir before +login anonymous, keep the TF2 folder separate from the SteamCMD folder, and re-run the update until it reports that app 232250 is fully installed. A half-finished first download can look like a mysterious launch crash later.

Fix crashes after the server has started

If the process loads server_srv.so for Team Fortress and then dies, you are looking at a crash rather than a missing launch flag. Add -debug, reproduce the fault once, and read both the live console and debug.log before changing plugins, rates or the token.

When a TF2 server crashes on start, work in this order
64-bit Linux crash with replay_srv.so
Console shows ELFCLASS32
and FATAL ERROR: replay_srv.so
then
Install 64-bit
libcurl-gnutls
result
Start srcds_run_64 again
On Debian and Ubuntu the package name is libcurl3-gnutls. The 32-bit i386 package alone is not enough.
If that fatal line is missing, verify app 232250 with SteamCMD and test +map ctf_2fort.
Copying replay_srv.so from another folder does not fix this. The missing 64-bit library does.

The 64-bit replay_srv.so crash

This is the Linux crash that showed up as soon as people switched to srcds_run_64. The console says the 64-bit server tried to load replay_srv.so from the 32-bit bin folder:

failed to dlopen .../bin/replay_srv.so error=.../bin/replay_srv.so: wrong ELF class: ELFCLASS32
Could not load: replay_srv.so
FATAL ERROR: Could not load: replay_srv.so

Then srcds_run_64 reports a segmentation fault. The fix that closed Valve’s own report is to install the 64-bit libcurl-gnutls package. On Debian and Ubuntu that package is libcurl3-gnutls; the 32-bit libcurl3-gnutls:i386 package alone is not enough for the 64-bit launcher. After it is installed, start srcds_run_64 again and confirm the fatal replay_srv.so line is gone.

Copying replay_srv.so from another folder does not solve it. Removing SourceMod also does not, because this fault happens before addons are the issue.

Damaged files or a bad default map

If there is no replay_srv.so line and the server dies while loading a map, treat the files and the map name as the next suspects. Stop the server, then verify the install:

./steamcmd.sh +force_install_dir ~/hlserver/tf2 +login anonymous +app_update 232250 validate +quit

SteamCMD’s validate option replaces files that do not match the official server depot. Host documentation for this exact TF2 segmentation-fault symptom points at the same two checks: verify the files, then confirm the default map name matches a map that is actually present. After the verify, start again with +map ctf_2fort so you know the first map is a stock file. If that holds and a custom map still crashes the server, the custom .bsp is the problem, not the machine.

Plugins that do not match the server architecture

A 64-bit TF2 server will not load 32-bit extensions. After you switch launchers, run meta list and sm version in the console. If Metamod or SourceMod does not appear, install matching 64-bit builds rather than assuming TF2 itself is crashing. The complementary case is also true: if you must keep an older 32-bit plugin, launch the 32-bit server until that plugin has a 64-bit build.

Fix connection and listing problems

Here the server process stays up. The failure is that players cannot find it, or they can see it and still cannot join. Direct connect is the fastest way to split those two cases. From the developer console, a player should try connect IP:27015, using the port from the server’s own network bind line.

The server is running, but friends cannot get in
The process stays up, but players cannot find or join it
Can someone outside your network join with connect IP:port?
No
Ports or bindForward UDP 27015 and compare it with the port on the network bind line.
Yes
Does the server appear in the browser?
No
Token or LAN modeAdd a GSLT created for App ID 440 and set sv_lan 0.
Yes
Did a TF2 update just ship?
Yes
Version mismatchStop the server and update app 232250 with SteamCMD.
No
Still stuck: compare the address they typed with the bind line, then check steam_appid.txt on Linux
Direct connect splits a listing problem from a network path problem. Fix the one you actually have.

The server is missing from the browser

A public TF2 server needs a valid Steam Game Server Login Token to appear in the server browser. Create that token for App ID 440, which is Team Fortress 2 itself, not 232250. 232250 is only the dedicated server package you download. The Steam account that creates the token must not be limited, community-banned or locked, and it needs a qualifying phone number. Use one token per server and treat it like a password.

Put it on the launch line as +sv_setsteamaccount YOURTOKEN. Without it, the server can still start and accept a direct connect, but it will not appear in the browser. That is why “I can join by IP, but nobody can find us” so often ends at the token rather than the router.

The server is stuck in LAN-only mode

Set sv_lan 0 in tf/cfg/server.cfg or on the launch line. A server with sv_lan 1 behaves like a local test even if the ports are open. On Linux, if it still refuses to leave LAN mode, add a steam_appid.txt file in the server directory containing only 232250.

Friends outside your network cannot join

If you can join from the same machine or the same LAN, but friends outside cannot, the process is running and the remaining problem is the path to it.

Port Protocol What it is for When you need it
27015 UDP Game traffic for the server itself Always, for anyone joining from outside the machine
27015 TCP RCON Only if you want remote console access
27020 UDP SourceTV Only if you use SourceTV; otherwise launch with -nohltv

Forward UDP 27015 to the machine running TF2 and allow it in the firewall. If the host has more than one address, +ip tells srcds which one to bind. If you would rather the server stop than silently pick another port, add -strictportbind. A silent port change is a classic reason the console looks healthy while every friend is still aiming at 27015.

RCON uses TCP on the game port. If RCON cannot connect, +ip 0.0.0.0 and rcon_address 0.0.0.0 are the usual bind-side fixes, after you have confirmed that TCP 27015 actually reaches the server. Do not open RCON to the internet with a weak password while you are debugging something else.

Nobody can join after a TF2 update

When Valve ships a TF2 update, clients update first. An older server then becomes unjoinable, which looks like a connection fault and is really a version mismatch. Stop the server, re-run the same SteamCMD command you used to install app 232250, then start it again. If you use Metamod or SourceMod, update those to builds that match the new server before you treat leftover load errors as a fresh crash.

Missing steamclient.so

If the console says it cannot find steamclient.so, the library is not where srcds expects it. On Linux, copy it into ~/.steam/sdk32/ and start the server again. That is a path problem, not a sign that the game files failed to download.

A working order you can reuse

Once you have seen the same faults a few times, the order below saves a lot of guesswork. Stop at the first yes.

  1. Read the console or debug.log. Look for a missing map, a fatal replay_srv.so line, a segmentation fault or the network bind line.
  2. If there is no map, add +map and use a stock map name that exists in tf/maps.
  3. If you are on 64-bit Linux and replay_srv.so failed with ELFCLASS32, install 64-bit libcurl-gnutls and try again.
  4. If the crash has no library error, verify app 232250 with SteamCMD and test ctf_2fort.
  5. If the server stays up, test connect IP:port from outside your network.
  6. If direct connect works but the browser listing does not, fix the App ID 440 token and sv_lan 0.
  7. If even direct connect fails from outside, forward UDP 27015 and compare that port with the bind line.
  8. If players can join but the game feels late or unstable, leave this page and use the lag guide.

If you would rather have the install, token and ports handled by a panel, compare current options in our Team Fortress 2 server hosting comparison. The troubleshooting steps above still apply: the console, the map, the token and the game port do the same job on a rented server as they do at home.

Want a TF2 server that stays reachable?

If the install works but you do not want to keep fighting home ports, updates and uptime, compare hosted TF2 plans by location, panel and support before you move the server.

Compare the best TF2 server hosts

Team Fortress 2 server FAQ

Why does my TF2 server crash with a segmentation fault on Linux?

On a 64-bit launch, the most specific cause is a failure to load replay_srv.so because the 64-bit libcurl-gnutls package is missing. The console shows wrong ELF class: ELFCLASS32 and then FATAL ERROR: Could not load: replay_srv.so. Install 64-bit libcurl-gnutls (on Debian and Ubuntu, libcurl3-gnutls) and start srcds_run_64 again. If that line is not present, verify the files with SteamCMD and check that the default map name matches a real map file.

Why is my TF2 server not showing in the server browser?

The usual cause is a missing or wrong Game Server Login Token. Create the token for App ID 440, not 232250, and add +sv_setsteamaccount YOURTOKEN to the launch line. Then set sv_lan 0. Direct connect can still work without a token, which is why the server can feel “fine” to you and invisible to everyone using the browser.

What does “WARNING: No map specified” mean on a TF2 server?

It means the server was started without +map or +randommap. Valve’s launcher warns that the server may not heartbeat in that state, so it will not advertise itself properly and players have nothing to join. Add a stock map such as +map ctf_2fort and confirm the name matches a file in tf/maps.

What should I do after a TF2 update when nobody can join?

Stop the server and update it with SteamCMD using app ID 232250, the same command you used to install it. Clients pick up Valve’s update first, so an older dedicated server becomes unjoinable until it is updated too. If you run Metamod or SourceMod, update those to matching builds after the server files, then confirm the console reaches the network bind line again.

How do I tell a TF2 crash from a connection problem?

A crash ends the process. You will see a segmentation fault, a fatal load error or an automatic restart from srcds_run. A connection problem leaves the process running: the console reaches the network bind line, but players cannot find the server or cannot complete a join. Use the console to tell those apart before you change the token, the ports or the plugin list.

More Team Fortress 2 server help

The host comparison, plus the setup and lag guides that sit next to this checklist.

Checked against Valve’s TF2 dedicated server launcher messages, Valve’s 18 April 2024 64-bit server notes, the official report on the 64-bit replay_srv.so crash, SteamCMD’s own install warnings and host documentation for TF2 segmentation faults, November 2026. Host panels change their labels from time to time, but the console lines, token, map and ports above stay the same.

Similar Posts