一、问题复现(出现问题后的思路,想直接实操的转到第二部分和第三部分)
近期朋友突然想说玩泰拉瑞亚,正好近期也没什么事,手上刚好有两台2c2g的服务器,就拿来玩个小服和朋友一起玩,就开始稍微研究了一下服务器。
使用了纯官方版本的服务端后刚开始会正常运行,再游玩一到两小时左右会被OOM Killer
直接再次运行会被无限OOM Killer 必须重启服务器后才可以继续游玩
这个时候就有了一些思路
1、为什么会被 OOM Killer
-
2G内存确实紧张:官方推荐至少4GB内存
-
内存泄漏/累积:泰拉瑞亚服务器长时间运行可能存在内存累积
-
交换空间不足:多数云服务器默认swap很小或不开启
2、为什么 Killer 后必须重启
-
进程残留:OOM Killer可能没完全清理所有相关进程
-
资源泄漏:父进程或子进程可能仍在占用资源
-
文件锁未释放:世界文件或其他资源被锁定
此处是我使用的 华为云 Flexus应用服务器L实例 2c2g Centos 7 服务器
(事实上任何 Linux 均通用,只是我手上的是 Centos 7)

我们查看一下内存情况

可以看到云服务器基本不会设置 Swap ,同样也存在于 阿里云服务器上
所以可以通过自行 Linux 优化来避免上述问题
二、部署过程
1、官网下载服务端
https://www.terraria.org/
点击下方下载

2、将压缩包上传至 Linux 服务器中
输入命令解压压缩包
# 解压泰拉瑞亚服务器压缩包
unzip terraria-server-1449.zip

解压后我们把 Linux 开服包扔到 Root 目录下
mv ./1449/Linux/ ./terraria # 将服务器中的 Linux 版本移动到目录下
rm -rf 1449/ # 删除其他版本
chmod 755 -R terraria # 给予执行权限
cd terraria # 进入服务器目录
此时我们其实就可以开启服务器了,目录中的 TerrariaServer.bin.x86_64 文件就是服务器启动核心
./TerrariaServer.bin.x86_64
此时会有两个步骤,方式一是直接写好在配置文件中直接运行,方式二是一步一个操作,如果不想去了解每个配置是什么意思的话,可以直接使用方式一
方式一(配置文件)(推荐)
我们可以编写 serverconfig.txt 文件来提前写好服务器配置,让服务端直接依据配置文件来运行
这个是一键生成配置文件的命令并下方为相应的注释:
cat > serverconfig.txt << 'EOF'
maxplayers=5
world=./worlds/starsleap/starsleap.wld
port=7777
password=starsleap
worldpath=./worlds/starsleap/
autocreate=3
worldname=starsleap
banlist=banlist.txt
secure=0
priority=0
language=zh
difficulty=2
motd=Starsleap
EOF
# 最大玩家数量 (1-255)
maxplayers=5
# 服务器端口号 (默认7777,确保防火墙已开放此端口)
port=7777
# 服务器密码 (留空则不设密码,建议设置防止陌生人加入)
password=starsleap
# 自动创建世界设置
# ————————————————————
# 自动创建世界尺寸: 1=小, 2=中, 3=大
autocreate=3
# 新世界名称
worldname=starsleap
# 世界文件存储路径(相对或绝对路径)
worldpath=./worlds/starsleap/
# 游戏难度设置
# ————————————————————
# 难度模式: 1=经典, 2=专家, 3=大师, 4=旅途
# 专家模式难度较高,适合有经验玩家
difficulty=2
# 服务器信息与安全
# ————————————————————
# 登录提示信息 (进服公告)
motd=Stars_leap
# 封禁列表文件
banlist=banlist.txt
# 安全模式: 0=关闭, 1=开启 (开启后需要Steam验证)
secure=0
# 进程优先级: 0=正常, 1=高 (建议0,避免影响系统)
priority=0
# 游戏语言: en=英语, zh=中文, de=德语等
language=zh
方式二(一步一操作)
这一步是询问你是要创建新世界还是删除世界 我们输入 n 回车 创建新世界

这一步是询问你要创建的世界大小,我们输入 3 回车 选择 大世界

这一步是询问你要选择的难度,我们几个人追求完整的游戏体验,所以输入 3 回车(根据自己需要的来选择)
1. Classic(经典/普通模式)
2. Expert(专家模式)
3. Master(大师模式)
4. Journey(旅途模式)

这一步是询问你要选择的世界类型,这里我选择的是 1 随机生成
1. Random(随机):50%腐化 / 50%猩红
2. Corrupt(腐化之地)
3. Crimson(猩红之地)

这一步是询问你要设置的世界名字,自定义即可

这一步是询问你是否设置种子,直接回车就是随机,如果需要自定义种子就自行设置

完成操作后,会开始生成世界

此时可以看到 CPU 和 内存会被迅速占用,等待生成完成后,会让你选择世界,我们选择我们刚刚创建好的世界

这一步是询问你最大玩家数

这一步是设置服务器端口,默认为 7777 可自行设置

这一步是泰拉瑞亚服务器的 UPnP(通用即插即用)端口自动转发 设置
云服务器选 N 如果是家庭局域网自己开服玩 可以选择 Y
解释一下:
-
UPnP:一种网络协议,允许程序自动配置路由器端口转发
-
作用:让外部玩家能直接连接到你的服务器
-
原理:服务器尝试自动在路由器上打开指定端口(默认7777)
选择 y 的话 会自动尝试配置路由器开放端口,n 就是自己手动配置,因为云服务器商不支持这种操作,所以选择 n 就像,如果你家庭支持那你就开,大多数情况 n 就行

这一步是选择你的入服密码,可以自行选择是否设置,不设置可以直接回车

此时,我们的服务器就已经创建完成

我们去云服务器安全组配置端口

开放后即可在游戏中连接,选择多人游戏 -> 通过 IP 加入 -> 选择玩家 -> 输入服务器 IP 地址 -> 输入你设置的端口(默认 7777)-> 输入密码(如果设置了的话)



成功连接

服务器后台也可以看到(上面那个IP连接的端口被扫了,无视即可,或者自行屏蔽)

Screen 后台运行
此时我们可以发现,如果关闭服务器后台的话,服务器就自己关闭了,所以我们需要安装 screen 来让后台运行
输入 exit 保存并退出后,我们安装 screen

yum install screen -y # centos 安装 screen
apt install screen -y # ubuntu/debian 系安装命令
安装后输入 screen 进入目录会开启一个新的窗口,重复运行服务器即可
三、优化过程
此时我们也可以看到,在一个人运行的过程中,内存已经占用 1.57G 在后续游玩中会持续上涨,所以我们需要进行优化
![]()
内存扩容(Swap)(并非传统意义上的扩容)
第一步我们提到,我们需要进行 Swap 虚拟内存的配置,来进行内存扩容
# 创建4GB Swap(我们的内存实际可用为 1.7G 左右,所以 Swap 设置为内存的2.35倍,科学比例)
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
内核参数优化
在使用了 虚拟内存 技术来进行内存扩容之后,我们还需要进行内核参数优化,我们的原内核参数默认为:
cat /proc/sys/vm/swappiness
cat /proc/sys/vm/vfs_cache_pressure

什么是 vm.swappiness 和 vm.vfs_cache_pressure 呢?
vm.swappiness
-
含义: 控制系统何时开始使用swap
0 = 尽量不用swap,除非内存完全耗尽(可能触发OOM Killer)
50 = 当内存使用达50%时开始使用swap
100 = 积极使用swap,几乎不保留内存缓存
vm.vfs_cache_pressure
-
含义: 控制回收文件缓存的积极程度
1 = 非常懒惰,几乎不回收(可能占用大量内存)
100 = 标准回收速度(默认)
1000 = 非常积极,优先回收缓存给应用程序
原配置中的 0 100 完全不使用 swap 所以会导致 OOM Killer 杀死进程,而设置的 100 会频繁回收缓存,增加I/O 所以我们将其设置为 15/70
sysctl vm.swappiness=15
sysctl vm.vfs_cache_pressure=70
echo 'vm.swappiness=15' >> /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=70' >> /etc/sysctl.conf
sysctl -p
运行完之后可以重启服务器让配置永久生效
至此我们就进行好了配置,下面的脚本是一件配置第三部分的一键脚本,
#!/bin/bash
# 1. 创建4GB Swap
echo "1. 创建4GB Swap空间…"
swapoff /swapfile 2>/dev/null
rm -f /swapfile 2>/dev/null
fallocate -l 4G /swapfile || dd if=/dev/zero of=/swapfile bs=1M count=4096
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
echo "Swap创建完成"
# 2. 优化内核参数
echo "2. 优化内核参数…"
echo 'vm.swappiness=15' >> /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=70' >> /etc/sysctl.conf
sysctl -p
四、总结
内核优化让服务器开始使用 Swap
内存理论上达到了1.7GB + 4.0GB Swap = 5.7GB总内存 所以不会因为内存不够而让进程结束
就可以稳定使 2c2g 服务器长时间运行(截止编写之前稳定运行18天)




