Four dedicated-server RAM lines get quoted as if they were the same kind of number. On the three servers that booted here, they were three different instruments.
Factorio 2.1.24, headless, Space Age, a fresh map of 896,200 bytes: the cgroup's memory.current was 393.3 MiB, anonymous memory was 386.1 MiB, and the process RSS was 430.7 MiB. Those three sit close together.
Satisfactory, Steam build 25782485, Unreal changelist 513885, on the entry map with a 4,603 byte settings file: anonymous memory was 168.6 MiB and RSS was 430.8 MiB. memory.current was 3.17 GiB, and 2.91 GiB of that was file cache from a 2.70 GiB install.
Project Zomboid 42.21.0, OpenJDK Zulu 25.0.1, a 6g heap, ZGC, a new servertest world: the first sample was 952 MiB anonymous, 6.95 GiB RSS, and 7.00 GiB of memory.current inside an 8 GiB cap, with 6.01 GiB of that in the file bucket. The line then fell and flattened. Anonymous memory stayed near 966 MiB. The pages that stayed in file were the JVM heap.
Enshrouded's FAQ puts the idle process at about 4.4 GB of physical RAM, adds up to 100 MB per player, and caps the process at 6 GB. The specification page lists 16 GB of RAM for the machine, both for 4 to 6 players and for 16. The FAQ describes a Windows executable and a DOS window. This run was Linux containers, so that row stayed on Keen's pages.
Each cgroup was sampled every 60 seconds. The last row is 21,576 seconds after the first, 360 rows per server. Factorio's anonymous memory was 386.1 MiB on every row. memory.current went from 412,381,184 bytes to 412,454,912, up 72 KiB. Satisfactory's file line stayed 3,122,282,496 bytes, 2.91 GiB, for the whole run. Its anonymous memory ended at 168.8 MiB, inside a range of 168.6 to 172.1. Zomboid started at 7.003 GiB, was 2.804 GiB at 30 minutes and 2.155 GiB at 60, and read 2.088 GiB from about two and a half hours through the last sample. Anonymous memory over that stretch went from 952.0 MiB to 965.9 MiB.
| Server | What the publisher wrote | What the empty server held |
|---|---|---|
| Factorio 2.1.24, build 87808 | UDP 34197. The multiplayer page leaves RAM off. The FAQ's 4 GB line is the game PC, GPU included. | 393.3 MiB current, 386.1 MiB anonymous, 430.7 MiB RSS |
| Satisfactory, build 25782485 | 8 GB, and 16 GB for a larger save or more than 4 players. Ports 7777 and 8888. | 3.17 GiB current across six hours. Anonymous memory 168.6 to 172.1 MiB. |
| Zomboid 42.21.0 | 3 GB plus about 500 MB a player. The Windows batch ships a 16 GB heap. MaxPlayers 32. | 7.003 GiB at the first sample, 2.088 GiB at the last. Anonymous memory 952.0 to 965.9 MiB. Ceiling 6g. |
| Enshrouded | About 4.4 GB idle, a 6 GB process cap, on a machine listed at 16 GB. UDP 15637. | Windows executable. This run measured the other three. |
How much RAM does a Satisfactory dedicated server use?
The Satisfactory dedicated server page is a community table, and it says so. The memory row is 8 GB, and the same row names 16 GB for larger saves or for more than 4 players. The processor row wants a recent x86-64 chip, an Intel i5-3570 or better or a Ryzen 5 3600 or better, and a single-thread rating of 2000 or higher. It says the server uses several cores and still favors single-core speed. It names kvm64 as a CPU model that fails in a VM, and a later section says that model is incompatible and can crash when a new game is created. Linux storage on that page is 8 GB, made of a distro up to about 2 GB plus game files of about 2 GB. Windows server files are listed at 12.4 GB. The Linux depot that downloaded here was 2,901,208,976 bytes.
The container was robtme/satisfactory-server. The image README says the author renamed the account from wolveix to robtme, and that wolveix/satisfactory-server still receives updates. MAXPLAYERS was 4. VMOVERRIDE was false, the image default. That flag skips the CPU model check, and the README says to leave it alone in ordinary use. This guest's model string is an 11th Gen Core i7-1185G7E. The log reached Game Engine Initialized with the flag left false. The build string is ++FactoryGame+rel-main-anniversary-2026-CL-513885, engine 5.6.1-513885. The map was /Game/FactoryGame/Map/DedicatedserverEntry, match state WaitingToStart, max tick rate 30. The only save on disk was ServerSettings.7777.sav. The 8 GB and 16 GB lines are about a factory. This process had loaded the entry map.
Anonymous memory at 168.6 MiB is that unclaimed server. The 3.17 GiB cgroup total is the working set plus the page cache of the files Steam had just written. A late-game save would move the anonymous number. The wiki's single column has nowhere to put the difference.
The port section for patch 1.1.0.0 asks for 7777 TCP (server traffic and the HTTPS API), 7777 UDP (game traffic), and 8888 TCP (reliable messaging). The page says ports 15000 and 15777 stopped at patch 1.0. The standard port's outside number and inside number have to match. The reliable port can be remapped with -ExternalReliablePort. This container published 7777:7777 for TCP and UDP and 8888:8888 for TCP, and the log bound the API to 7777 and the reliable socket to 8888.
docker run -d --name satisfactory-idle \
--memory=8g --memory-swap=8g \
-p 7777:7777/tcp -p 7777:7777/udp -p 8888:8888/tcp \
-e MAXPLAYERS=4 -e PUID=1000 -e PGID=1000 -e STEAMBETA=false \
-v "$PWD/satisfactory:/config" \
robtme/satisfactory-server:latestHow much RAM does an Enshrouded server use?
Keen publishes two answers. The FAQ's RAM answer is about the process: about 4.4 GB idle, up to 100 MB more for each player, and a cap of 6 GB. The same page wants about 30 GB free on disk, says the uncompressed server files are currently about 13 GB, and puts a save between 1 MB and 100 MB, small at the start and closer to 100 MB on a world with large bases. Saves land in ./savegame, logs in ./logs, and enshrouded_server.json sits next to the executable. The server uses IPv4. The query port in that file is 15637. A running server prints HostOnline in the console.
The specification page answers a different question, the computer. For 4 to 6 players it asks for a Core i7 at 3.2 GHz or an equivalent AMD chip, 6 cores and 12 threads, 16 GB of RAM, SSD storage with 30 GB free, and 2 Mbit/s of upload per player. Sixteen players keep the 16 GB and the 30 GB, and step the CPU to an i7 at 3.7 GHz or equivalent, 8 cores and 16 threads. The extra players on that page are a CPU change. The RAM line stays put.
The 16 GB figure is the machine. The 4.4 GB figure is the process. A host who buys 16 GB because the spec page says 16 GB has bought the box Keen named, and the process Keen named is the smaller number. This host measured the other three games. The Enshrouded server on that FAQ is a Windows program with a DOS window, and Wine is absent here, so the 4.4 GB line was read and left unrun.
How much RAM does a Project Zomboid server use?
Tech Support says to allocate at least 3 GB for the server itself, then about 500 MB for each additional player. The example on that page is four players as 3 GB plus four times 0.5 GB, 5 GB assigned, which counts every player in the extra and also keeps the 3 GB base. The unmodded client on the same page is described as using around 2.4 GB to 2.8 GB, with a default heap of 3 GB (-Xmx3072m).
The dedicated server page says the Windows StartServer64.bat specifies 16 GB of starting memory, and that you change -Xms and -Xmx or the server fails with memory errors. The example launch line on that page is -Xms6g -Xmx6g. The Linux copy from Steam app 380870 keeps the heap in ProjectZomboid64.json. The start script's own comment says to edit -Xmx there. The file that installed here shipped -Xmx8g. The running server used 6g, so the ceiling sat inside an 8 GiB container with room around the JVM.
sed -i 's/-Xmx8g/-Xmx6g/' /home/steam/zserver/ProjectZomboid64.json{
"mainClass": "zombie/network/GameServer",
"classpath": [
"java/.",
"java/projectzomboid.jar"
],
"vmArgs": [
"-Djava.awt.headless=true",
"-Xmx6g",
"-Dzomboid.steam=1",
"-Dzomboid.znetlog=1",
"-Djava.library.path=linux64/",
"-Djava.security.egd=file:/dev/urandom",
"-XX:+UseZGC",
"-XX:-OmitStackTraceInFastThrow"
]
}
Server settings ship MaxPlayers at 32, allow a setting from 1 to 100, and warn that counts above 32 can mean poor map streaming and desync. The generated servertest.ini on this run had MaxPlayers=32, DefaultPort=16261, UDPPort=16262. The dedicated server page lists both as UDP. The log reached SERVER STARTED and named 16261 for the Steam connection and 16262 for UDPRakNet. UPnP=true was in the ini. The log found no UPnP gateway, printed its hang hint, and continued.
SteamCMD's first anonymous attempt at app 380870 stopped with Missing configuration. A second update in the same session, after app_info_update 1, finished. du on /home/steam/zserver read 7,206,116,309 bytes. The world directory under /home/steam/Zomboid was 3,028,085 bytes. That is a new map, the size you get before anyone has walked it. The first boot reads an admin password from stdin and exits if the pipe is empty. After a password was set, the server stayed up. Java is Zulu 25.0.1+8-LTS, and jcmd is absent from that JRE, so the heap instruments here are the json and the cgroup.
The 6g flag is a ceiling the empty map left mostly unused. At the first sample, anonymous memory was 952 MiB, file was 6.01 GiB, and memory.current was 7.00 GiB of an 8 GiB cap. RSS was 6.95 GiB. The install is 6.71 GiB, and a ps reading in that first minute counts the files the process had just pulled in.
The file line then fell for about an hour and flattened. Anonymous memory stayed near 966 MiB the whole way. Once it was flat, inactive_file was about 5 MiB and file was about 1.10 GiB of shmem. The process map for that shared memory is /memfd:java_heap, about 1.08 GiB resident, with another 831 MiB of anonymous mappings and a 122 MiB native [heap] beside it. HotSpot put the Java heap on a memfd, so the cgroup counts that heap under file and shmem. The anon line is the other mappings. The 6g ceiling sits above both of those numbers. memory.events for this container stayed at zero for max and oom.
A visited map can still grow that memfd toward the 6g flag. The first minute and the settled hour are already two different bills for the same empty world. A panel point taken at startup shows about 7 GiB. A panel point taken after the cache has cooled shows about 2.1 GiB, and most of that 2.1 is the heap plus the other anonymous mappings, with the install's page cache gone.
@ShutdownOnFailedCommand 0
force_install_dir /home/steam/zserver
login anonymous
app_info_update 1
app_update 380870 validate
app_update 380870 validate
quitHow much RAM does a Factorio headless server use?
The multiplayer page says servers use UDP port 34197, and that the port can be changed in the config. The headless section says graphics stay uninitialized, startup is faster, and memory use is lower. It gives the behavior and skips a RAM number. It also says the game pauses while no players are connected, unless no-auto-pause is set. The Factorio FAQ puts 4 GB of RAM on the minimum PC requirements, next to a DirectX 10.1 GPU, and 8 GB on the recommended PC requirements, next to another GPU. The headless answer on that FAQ is a Linux package and a Windows executable. RAM stays on the PC lines.
The container was factoriotools/factorio:stable. The log line is Factorio 2.1.24 (build 87808, linux64, headless, space-age). The image wrote /factorio/saves/fresh.zip, 896,200 bytes, map version 2.1.24-1. auto_pause in server-settings.json was true. The log reached InGame, then Missing token on the public listing, so the server stayed off the matching list. The log's player lines stay empty. File cache in the cgroup was 2.3 MiB. The three memory readings agree because the headless binary is small and the fresh map is smaller.
393 MiB is a fresh map with auto_pause left on and an empty player list. A megabase is a different save. The publisher page names the port. The save you actually play is the rest of the bill.
docker run -d --name factorio-idle \
--memory=4g --memory-swap=4g \
-p 34197:34197/udp \
-e GENERATE_NEW_SAVE=true \
-e SAVE_NAME=fresh \
-e LOAD_LATEST_SAVE=false \
-v "$PWD/factorio:/factorio" \
factoriotools/factorio:stableWhy container memory and the heap disagree
memory.current is the cgroup's whole bill. memory.stat splits it. anon is what the processes hold. file is the page cache of files they have read. A Docker --memory limit counts both. --memory-swap set equal to --memory means the cap is a hard ceiling, and this host's swap is already off. When the sum reaches the cap, the kernel is supposed to drop file cache before it kills the container.
name=zomboid-idle
cid=$(docker inspect -f '{{.Id}}' "$name")
cg="/sys/fs/cgroup/system.slice/docker-${cid}.scope"
cat "$cg/memory.current"
grep -E '^(anon|file) ' "$cg/memory.stat"
Factorio hides the split by having almost nothing to cache. Satisfactory and Zomboid are the install, resident, plus a much smaller working set. The same shape shows up on a JVM that is easier to quote. A Paper server under systemd carries an -Xmx ceiling and a separate RSS, and the two are different numbers on purpose. On this Zomboid image the json and the cgroup were the instruments on the box.
The host under all three was that i7-1185G7E, 8 vCPUs, 47.8 GiB of RAM, kernel 6.8.0-147. Factorio's cap was 4 GiB. Satisfactory and Zomboid were 8 GiB. The sampler read memory.current, anon, file, and the game process RSS every 60 seconds. Zero players joined.
A memory graph on a game panel is this cgroup number, kept. On NodeRings the graphs run from the last 15 minutes out to 30 days, CPU, memory, disk, and network, after you order the game from the host. The address players use is ip:port, and the server page holds Overview, Console, Files, and the rest of the controls. The publisher table has one RAM column. The panel draws memory.current. On Zomboid that column was 7.00 GiB in the first minute and about 2.1 GiB after the install's pages left, with the Java heap still in the file bucket because it lives on a memfd.
Factorio's fresh map held 393 MiB under a 4 GiB cap, with auto_pause on, and the line stayed there. Satisfactory's unclaimed server held 169 MiB of anonymous memory and 3.17 GiB in the cgroup for the whole trace. Almost all of the 3.17 is inactive_file, about 2.91 GiB, and shmem on that container is about 2 MiB. The wiki's 8 GB starting line is for a factory. The file on disk was settings, 4,603 bytes. Keen's pages already split the same way for the game this host left unrun: 4.4 GB for the process, 16 GB for the machine.
