Palworld Dedicated Server Configuration
Palworld is a popular creature-collecting and survival game that supports dedicated server hosting on Linux. This guide covers complete Palworld server installation, configuration through PalWorldSettings.ini, memory optimization, port setup, and systemd management. Palworld is relatively new but has become extremely popular, requiring careful resource allocation and network configuration.
Table of Contents
- System Requirements
- Installing SteamCMD and Palworld
- Server Configuration
- PalWorldSettings.ini Configuration
- Memory and Performance Settings
- Port Configuration
- Running with Systemd
- Admin and Moderation
- Backup Strategy
- Optimization Techniques
- Monitoring
- Conclusion
System Requirements
Palworld has significant memory requirements:
- Ubuntu 20.04 LTS or later
- 16GB RAM minimum (32GB recommended for 50+ players)
- 100GB+ disk space (SSD recommended for performance)
- 4+ CPU cores
- Stable internet connection
- Root or sudo access
Palworld servers consume significant RAM, often 15-25GB depending on player count.
Installing SteamCMD and Palworld
Install dependencies:
sudo apt-get update
sudo apt-get install -y curl wget file bzip2 gzip unzip python3 util-linux ca-certificates binutils lib32gcc1 lib32stdc++6
Create steam user:
sudo useradd -m -s /bin/bash steam
sudo -u steam mkdir -p /home/steam/steamcmd
Install SteamCMD:
cd /home/steam/steamcmd
sudo -u steam curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | sudo -u steam tar zxvf -
Verify SteamCMD:
sudo -u steam /home/steam/steamcmd/steamcmd.sh +quit
Create Palworld directory:
sudo -u steam mkdir -p /home/steam/palworld
Install Palworld server (app ID 2394010). This may take 20+ minutes:
sudo -u steam /home/steam/steamcmd/steamcmd.sh \
+force_install_dir /home/steam/palworld \
+login anonymous \
+app_update 2394010 \
+quit
Verify installation:
ls -la /home/steam/palworld/
file /home/steam/palworld/PalServer.sh
chmod +x /home/steam/palworld/PalServer.sh
Create data directories:
sudo -u steam mkdir -p /home/steam/palworld-data/{Saved,Logs,backups}
Server Configuration
Create the main server startup script:
sudo tee /home/steam/palworld/start_server.sh > /dev/null <<'EOF'
#!/bin/bash
PALWORLD_DIR="/home/steam/palworld"
DATA_DIR="/home/steam/palworld-data"
cd "$PALWORLD_DIR"
mkdir -p "$DATA_DIR/Logs"
mkdir -p "$DATA_DIR/Saved"
# Export environment variables for Palworld
export UE_SERVER_PORT="${UE_SERVER_PORT:-8211}"
export STEAM_PORT="${STEAM_PORT:-8211}"
export QUERY_PORT="${QUERY_PORT:-27015}"
# Run the server
exec "$PALWORLD_DIR/PalServer.sh" \
-port="${UE_SERVER_PORT}" \
-queryport="${QUERY_PORT}" \
-publiclobby \
-log \
-useperfthreads \
-NoAsyncLoadingThread \
-UseMultithreading \
2>&1 | tee "$DATA_DIR/Logs/palworld_$(date +%Y%m%d).log"
EOF
sudo chmod +x /home/steam/palworld/start_server.sh
sudo chown steam:steam /home/steam/palworld/start_server.sh
PalWorldSettings.ini Configuration
Create the server configuration file:
mkdir -p /home/steam/palworld-data/Saved/Config/LinuxServer/
sudo tee /home/steam/palworld-data/Saved/Config/LinuxServer/PalWorldSettings.ini > /dev/null <<'EOF'
[/Script/Pal.PalGameWorldSettings]
OptionSettings=(
Difficulty=None,
DayTimeSpeedRate=1.0,
NightTimeSpeedRate=1.0,
ExpRate=1.0,
PalCaptureRate=1.0,
PalSpawnNumRate=1.0,
PalDamageRateAttack=1.0,
PalDamageRateDefense=1.0,
PlayerDamageRateAttack=1.0,
PlayerDamageRateDefense=1.0,
PlayerStomachDecreaceRate=1.0,
PlayerStaminaDecreaceRate=1.0,
PlayerAutoHPRegeneRate=1.0,
PlayerAutoHpRegeneRateInSleep=1.0,
PalStomachDecreaceRate=1.0,
PalStaminaDecreaceRate=1.0,
PalAutoHpRegeneRate=1.0,
PalAutoHpRegeneRateInSleep=1.0,
BuildObjectDamageRate=1.0,
BuildObjectDeteriorationDamageRate=1.0,
CollectionDropRate=1.0,
CollectionObjectHpRate=1.0,
CollectionObjectRespawnSpeedRate=1.0,
EnemyDropItemRate=1.0,
DeathPenalty=All,
bEnablePlayerToPlayerDamage=True,
bEnableFriendlyFire=False,
bEnableInvaderEnemy=True,
bActiveUNKO=False,
bEnableAimbot=False,
bEnableNPCDelivery=True,
bEnablePalWarp=True,
bIsMultiPlay=True,
bIsPvP=True,
bCanPickupOtherGuildDeathPenaltyDrop=False,
bEnableNonLoginPenalty=True,
bEnablePalPass=True,
GuildPlayerMaxNum=20,
PalEggDefaultHatchingTime=72.0,
WorkSpeedRate=1.0,
bIsShowEnemyHealth=False,
bIsMultiplayer=True,
bServerLog=True,
bServerDTLS=True,
LogFormatType=Text
)
[/Script/Pal.PalNetworkPrivateSettings]
b_Enable_Private_Network=False
Private_Network_Authentication_Token=""
[/Script/Pal.PalGameSession]
SessionName=Palworld Server
MaxPlayer=32
Password=""
bIsLAN=False
bPublicSession=True
bUseVoiceChat=True
EOF
sudo chown steam:steam /home/steam/palworld-data/Saved/Config/LinuxServer/PalWorldSettings.ini
Configuration explanation:
Difficulty: None (standard), difficulty options availableExpRate: 1.0 (default), increase for faster levelingPalCaptureRate: 1.0, increase to make capturing easierPalSpawnNumRate: 1.0, control creature spawning frequencyPlayerDamageRateAttack/Defense: 1.0, adjust PvP combat balanceGuildPlayerMaxNum: 20, maximum players in a guild/groupbEnablePvP: Enable/disable player versus player combatbEnableNonLoginPenalty: Penalty for not playing for a period
Memory and Performance Settings
Create environment file with memory optimization:
sudo tee /home/steam/palworld/server.env > /dev/null <<'EOF'
# Memory settings (adjust based on available RAM)
UE_MALLOC_BIN_DETAILED_STATS=1
MALLOC_TRIM_THRESHOLD=536870912
# Performance settings
UE_SERVER_PORT=8211
STEAM_PORT=8211
QUERY_PORT=27015
# Threading options
UE_NUM_THREADS=8
# Logging
UE_LOG_LEVEL=warning
# Server options
SERVER_PASSWORD=
MAX_PLAYERS=32
COMMUNITY_NAME=MyPalworldServer
EOF
sudo chown steam:steam /home/steam/palworld/server.env
sudo chmod 600 /home/steam/palworld/server.env
Optimize system memory settings:
# Increase virtual memory if needed
sudo sysctl -w vm.swappiness=10
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
# Increase max map count for large applications
sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
# Apply changes
sudo sysctl -p
Monitor memory usage:
# Real-time monitoring
watch -n 1 'free -h && ps aux | grep PalServer | grep -v grep'
# Detailed memory breakdown
ps -o pid,vsz,rss,pmem,comm $(pgrep -f PalServer)
# Memory profiling
smem -s rss -p PalServer
Port Configuration
Palworld uses specific ports:
# Game server port (UDP)
UE_PORT=8211
# Query port for server list (UDP)
QUERY_PORT=27015
# Configure firewall (UFW)
sudo ufw allow 8211/udp
sudo ufw allow 27015/udp
sudo ufw allow 8211/tcp
sudo ufw allow 27015/tcp
# For iptables systems
sudo iptables -A INPUT -p udp --dport 8211 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 27015 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8211 -j ACCEPT
sudo iptables-A INPUT -p tcp --dport 27015 -j ACCEPT
# Verify ports are listening
sudo netstat -tulnp | grep -E "8211|27015"
ss -tulnp | grep PalServer
Port forwarding on router:
# If accessing from outside your network, forward these to your server:
# External UDP 8211 -> Internal UDP 8211
# External UDP 27015 -> Internal UDP 27015
Running with Systemd
Create systemd service:
sudo tee /etc/systemd/system/palworld.service > /dev/null <<'EOF'
[Unit]
Description=Palworld Dedicated Server
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/home/steam/palworld
EnvironmentFile=/home/steam/palworld/server.env
ExecStart=/home/steam/palworld/start_server.sh
Restart=on-failure
RestartSec=30
StandardOutput=journal
StandardError=journal
# Critical resource limits for Palworld
LimitNOFILE=65536
LimitNPROC=32768
MemoryMax=28G
# Security
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/home/steam/palworld-data
[Install]
WantedBy=multi-user.target
EOF
Enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable palworld.service
sudo systemctl start palworld.service
sudo systemctl status palworld.service
Monitor service logs:
sudo journalctl -u palworld.service -f
sudo journalctl -u palworld.service -n 100 --no-pager
tail -f /home/steam/palworld-data/Logs/palworld_$(date +%Y%m%d).log
Admin and Moderation
Palworld admin commands (via admin panel or console):
# Server management commands
/ShowPlayers # List all connected players
/Info # Server information
/Save # Force save world
# Player management
/Kick PlayerName # Kick a player
/Ban PlayerSteamID # Ban a player
/Unban PlayerSteamID # Unban a player
/BanList # Show banned players
# Game control
/Broadcast Message # Send message to all players
/DoExit # Graceful server shutdown
/ForceStopGame # Force stop the game
Create ban list file:
sudo tee /home/steam/palworld-data/Saved/bans.txt > /dev/null <<'EOF'
# Format: SteamID64 or IP address (one per line)
# Example:
# 76561198012345678
# 192.168.1.100
EOF
sudo chown steam:steam /home/steam/palworld-data/Saved/bans.txt
Create admin script for easy management:
sudo tee /home/steam/manage_palworld.sh > /dev/null <<'EOF'
#!/bin/bash
case "$1" in
status)
systemctl status palworld.service
;;
restart)
echo "Restarting Palworld server..."
systemctl restart palworld.service
sleep 5
systemctl status palworld.service
;;
logs)
journalctl -u palworld.service -f -n 100
;;
backup)
/home/steam/backup_palworld.sh
;;
*)
echo "Usage: $0 {status|restart|logs|backup}"
;;
esac
EOF
sudo chmod +x /home/steam/manage_palworld.sh
Backup Strategy
Create automated backup script:
sudo tee /home/steam/backup_palworld.sh > /dev/null <<'EOF'
#!/bin/bash
DATA_DIR="/home/steam/palworld-data"
BACKUP_DIR="$DATA_DIR/backups"
RETENTION_DAYS=30
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# Backup world save data
tar -czf "$BACKUP_DIR/palworld_backup_${TIMESTAMP}.tar.gz" \
-C "$DATA_DIR" Saved/ \
2>/dev/null
if [ $? -eq 0 ]; then
SIZE=$(du -sh "$BACKUP_DIR/palworld_backup_${TIMESTAMP}.tar.gz" | awk '{print $1}')
echo "[$(date)] Backup created: palworld_backup_${TIMESTAMP}.tar.gz ($SIZE)"
else
echo "[$(date)] Backup failed!" >&2
exit 1
fi
# Cleanup old backups
OLD_BACKUPS=$(find "$BACKUP_DIR" -name "palworld_backup_*.tar.gz" -mtime +${RETENTION_DAYS})
if [ ! -z "$OLD_BACKUPS" ]; then
echo "$OLD_BACKUPS" | xargs rm -v
echo "[$(date)] Old backups removed"
fi
# Keep track of backup sizes
du -sh "$BACKUP_DIR" | awk '{print "Total backup size: " $1}'
EOF
sudo chmod +x /home/steam/backup_palworld.sh
sudo chown steam:steam /home/steam/backup_palworld.sh
Schedule daily backups:
# Edit crontab
sudo tee -a /var/spool/cron/crontabs/steam > /dev/null <<'EOF'
# Daily backup at 3 AM
0 3 * * * /home/steam/backup_palworld.sh >> /home/steam/palworld-data/Logs/backup.log 2>&1
# Restart server daily at 4 AM for maintenance
0 4 * * * systemctl restart palworld.service >> /home/steam/palworld-data/Logs/maintenance.log 2>&1
EOF
sudo systemctl restart cron
Restore from backup:
sudo systemctl stop palworld.service
BACKUP="/home/steam/palworld-data/backups/palworld_backup_20240101_030000.tar.gz"
sudo -u steam tar -xzf "$BACKUP" -C /home/steam/palworld-data/
sudo systemctl start palworld.service
Optimization Techniques
For better performance with large player counts:
# CPU affinity for server process
PALPID=$(pgrep -f PalServer)
taskset -p -c 0-7 $PALPID
# Monitor CPU usage
htop -p $PALPID
# Increase UDP buffer sizes
sudo sysctl -w net.core.rmem_max=134217728
sudo sysctl -w net.core.wmem_max=134217728
sudo sysctl -w net.core.rmem_default=131072
sudo sysctl -w net.core.wmem_default=131072
# Enable TCP fast open (if supported)
sudo sysctl -w net.ipv4.tcp_fastopen=3
Monitor system resources continuously:
# Create monitoring dashboard
watch -n 2 'echo "=== Palworld Server Status ===" && \
echo "" && \
ps aux | grep PalServer | grep -v grep | awk "{print \"PID: \" \$2, \"MEM: \" \$6/1024 \"MB\", \"CPU: \" \$3 \"%\"}" && \
echo "" && \
netstat -s | grep -i udp && \
echo "" && \
df -h /home/steam/palworld-data | awk "NR==2 {print \"Disk: \" \$5 \" used\"}"'
Monitoring
Create comprehensive monitoring script:
sudo tee /home/steam/monitor_palworld.sh > /dev/null <<'EOF'
#!/bin/bash
echo "=== Palworld Server Status ==="
echo "Timestamp: $(date)"
echo ""
# Service status
if systemctl is-active --quiet palworld.service; then
echo "✓ Service is running"
else
echo "✗ Service is NOT running"
exit 1
fi
# Process info
PID=$(pgrep -f PalServer)
if [ ! -z "$PID" ]; then
MEM=$(ps -p $PID -o rss= | awk '{print $1/1024 " MB"}')
CPU=$(ps -p $PID -o %cpu= | awk '{print $1 "%"}')
echo "Process ID: $PID"
echo "Memory: $MEM"
echo "CPU: $CPU"
fi
# Port status
echo ""
echo "Port Status:"
for PORT in 8211 27015; do
if ss -tulnp | grep -q ":$PORT "; then
echo " ✓ Port $PORT listening"
else
echo " ✗ Port $PORT NOT listening"
fi
done
# Disk space
echo ""
USAGE=$(df -h /home/steam/palworld-data | awk 'NR==2 {printf "%s / %s (%s)\n", $3, $2, $5}')
echo "Disk Usage: $USAGE"
# Recent errors or warnings
echo ""
RECENT_ERRORS=$(tail -50 /home/steam/palworld-data/Logs/palworld_*.log 2>/dev/null | grep -i "error\|fatal\|exception" | wc -l)
echo "Recent errors: $RECENT_ERRORS"
# Backup status
LATEST_BACKUP=$(ls -t /home/steam/palworld-data/backups/palworld_backup_*.tar.gz 2>/dev/null | head -1)
if [ ! -z "$LATEST_BACKUP" ]; then
echo "Latest backup: $(basename $LATEST_BACKUP) - $(date -r $LATEST_BACKUP '+%Y-%m-%d %H:%M')"
fi
EOF
sudo chmod +x /home/steam/monitor_palworld.sh
Run monitoring:
/home/steam/monitor_palworld.sh
watch -n 10 '/home/steam/monitor_palworld.sh'
Update server to latest version:
sudo systemctl stop palworld.service
sudo -u steam /home/steam/steamcmd/steamcmd.sh \
+force_install_dir /home/steam/palworld \
+login anonymous \
+app_update 2394010 \
+quit
sudo systemctl start palworld.service
Conclusion
Your Palworld dedicated server is now fully configured with optimized memory settings, proper networking, and automated backup protection. Palworld provides exciting multiplayer creature-catching experiences with cooperative gameplay mechanics.
Key points:
- Palworld demands significant RAM - monitor memory usage closely
- Configure PalWorldSettings.ini for your desired gameplay experience
- Implement daily automated backups for data protection
- Monitor server performance and player experience
- Keep the server updated with latest patches
- Use admin commands for effective community management
- Plan for scaling as your player base grows
A well-maintained Palworld server can provide hundreds of hours of engaging multiplayer entertainment for your player community.


