内存不足是小配云服务器最常遇到的问题:2G、4G 的机器,跑个游戏服加个网站,内存就红了。要么升级配置,要么把内存用到极致。
这篇讲清楚三件事:Swap 怎么建怎么调、内存到底被谁吃了、不升级配置怎么挤出内存。
需要云服务器可以看看财富云计算:NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,一键开服面板,主流游戏快速部署。
一、Swap 是什么:硬盘伪装的内存
Swap(交换分区)是把一部分磁盘空间当内存用。物理内存不够时,内核把不活跃的页面挪到磁盘上,腾出内存给当前任务。
三个关键认知:
- Swap 比内存慢几千倍,因为磁盘 IO 和内存 IO 差着数量级
- 但有 Swap 比没有强——没有 Swap,内存一满系统直接 OOM Killer 杀进程,游戏服说没就没
- Swap 是兜底,不是常态。Swap 长期吃满,说明内存真的不够
建议:不管机器多大,都配 Swap。1G 内存配 1G Swap,4G 内存配 2–4G Swap。
二、查看当前内存与 Swap
# 看内存和 swap 总量/使用
free -h
# 看 swap 是分区还是文件
swapon --show
# 看内存具体被谁占了
ps aux --sort=-%mem | head -15free -h 输出解读:
total used free shared buff/cache available
Mem: 3.8G 2.1G 312M 45M 1.4G 1.5G
Swap: 2.0G 0B 2.0G重点看 available 那一列,不是 free。buff/cache 里的内存是可回收的,系统会自动还。available 才是真正能用的。
三、创建 Swap:文件方式(最通用)
云服务器默认可能没开 Swap,按下面步骤加:
# 1. 创建 2G 的 swap 文件(bs 块大小 x count 块数)
fallocate -l 2G /swapfile
# 老系统 fallocate 不支持就用 dd
# dd if=/dev/zero of=/swapfile bs=1M count=2048
# 2. 权限必须设 600,否则系统警告
chmod 600 /swapfile
# 3. 格式化为 swap
mkswap /swapfile
# 4. 启用
swapon /swapfile
# 5. 写入 fstab,开机自动挂载
echo '/swapfile none swap sw 0 0' >> /etc/fstab验证:
free -h # Swap 行应该有数
swapon --show # 显示 /swapfile删除 Swap(不需要时):
swapoff /swapfile
rm -f /swapfile
sed -i '/\/swapfile/d' /etc/fstab四、调优:三个参数决定 Swap 性格
swappiness 控制系统多积极地把内存挪到 Swap:
# 查看当前值(默认 60)
cat /proc/sys/vm/swappiness
# 临时修改
sysctl vm.swappiness=10
# 永久修改
echo 'vm.swappiness = 10' >> /etc/sysctl.d/99-sysctl.conf
sysctl -p /etc/sysctl.d/99-sysctl.conf怎么设:
| 场景 | swappiness | 理由 |
|---|---|---|
| 游戏服、数据库 | 10 | 尽量用物理内存,避免游戏卡顿 |
| 普通 Web 服务器 | 30–60 | 默认值,平衡 |
| 内存极小(1G)机器 | 40–60 | 多利用 Swap 兜底 |
另两个参数(内存紧张时调):
# 水位线比例,默认50,降到20更倾向于回收缓存而非swap
vm.watermark_scale_factor = 20
# 脏页回写策略:内存紧张时降低,让系统尽快把脏数据写盘
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5更多内核参数调优见内核参数优化 sysctl。
五、诊断:内存到底被谁吃了
free 只能看总量,定位元凶要组合拳:
# 1. 进程内存排序(看 RSS 实际占用)
ps aux --sort=-%mem | head -15
# 2. 更直观的交互式查看
yum install -y htop # 或 apt install -y htop
htop
# 3. 看某个进程的内存明细(以 java 为例)
cat /proc/$(pgrep -f java | head -1)/status | grep -E 'VmRSS|VmSize'
# 4. slab 缓存占用(内核对象缓存)
slabtop -o
# 5. 谁在产生内存泄漏?看增长趋势
while true; do ps aux --sort=-%mem | head -3; sleep 5; done常见内存大户:
| 大户 | 典型占用 | 处理 |
|---|---|---|
| Java(我的世界服务端) | 1–8G | 调 -Xmx 上限 |
| 幻兽帕鲁 PalServer | 8–16G | 换大内存或限制玩家数 |
| MySQL | 0.5–2G | 调 innodb_buffer_pool_size |
| Redis | 0.1–1G | 设 maxmemory |
| 残留的僵尸进程 | 不等 | kill 掉,检查为什么没退 |
六、不升级配置:挤出内存的 8 个办法
内存实在不够又不想加钱,按见效顺序试:
1. 砍掉不用的服务
# 看哪些服务在跑
systemctl list-units --type=service --state=running
# 关掉确认不用的(举例)
systemctl disable --now postfix # 邮件服务,网站不需要
systemctl disable --now rpcbind # NFS 相关,不用就关
systemctl disable --now bluetooth # 服务器没蓝牙一条就省几十 MB,积少成多。
2. 限制游戏服内存上限
用 systemd 给服务端设 MemoryMax,防止失控(详见systemd 服务实战):
[Service]
MemoryMax=6G3. 调 JVM 参数(我的世界等 Java 服)
# 启动脚本里限制最大堆
java -Xms2G -Xmx4G -jar server.jar-Xmx 不要设超过物理内存的 70%,留空间给系统和其他进程。
4. 调 MySQL 缓冲池
# my.cnf
[mysqld]
innodb_buffer_pool_size = 256M # 小机器别给太大
performance_schema = OFF # 关掉能省 100MB+5. 给 Redis 设上限
# redis.conf
maxmemory 256mb
maxmemory-policy allkeys-lru6. 清理 pagecache(应急)
# 先 sync 再清,只影响性能不影响数据安全
sync && echo 3 > /proc/sys/vm/drop_caches立竿见影,但缓存清了之后读盘会变慢,只用于救急,不要写进定时任务。
7. 找出并杀掉僵尸进程
# 看状态为 Z 的进程
ps aux | awk '$8 ~ /Z/ {print}'
# 杀不掉说明父进程有问题,重启父进程8. 加 Swap(最有效)
前面说过,这是兜底。小机器加 2–4G Swap,能扛过大部分内存峰值。
七、OOM Killer:内存真爆了会发生什么
内存 + Swap 全满,内核启动 OOM Killer,挑一个进程杀掉。挑谁?oom_score 最高的那个——通常就是吃内存最多的(你的游戏服)。
查看和调整:
# 看某进程的 oom 分数(越高越先被杀)
cat /proc/$(pgrep -f PalServer)/oom_score
# 保护关键进程,降低被杀概率(-1000 表示基本免疫)
echo -1000 > /proc/$(pgrep -f PalServer)/oom_adj
# 日志里能看到 OOM 记录
dmesg | grep -i "killed process"防御性配置:给核心服务写 MemoryMax(systemd)或调低 oom_score_adj,让系统先杀不重要的进程。
八、升级配置的判断标准
什么时候该加内存了:
- Swap 长期占用 > 50%
vmstat的si/so(swap in/out)持续非 0- 游戏服频繁因 OOM 重启
- 加了上述所有优化还是卡
小内存机器跑大游戏(幻兽帕鲁、RUST 大服)本来就是拧巴,该升就升。NAT 型云服务器在同配置下比独立 IP 机型省一半以上,升级成本没那么痛。
小结
内存优化优先级:先砍无用服务 → 再调各服务上限 → 加 Swap 兜底 → 还不够再升级配置。按这个顺序来,4G 机器跑两个中小型游戏服是完全做得到的。
更多内容见财富云计算知识库:Linux 命令速查、磁盘挂载扩容、资源排查、crontab 计划任务全系列。需要云服务器可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上。
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]# 输出里有 bbr 才能用(内核 4.9+ 自带,主流云系统都支持)vm.swappiness = 10:游戏最怕卡顿,swap 换页会引入几十毫秒的延迟。设 10 让系统尽量用物理内存。前提是内存别太紧张,详见Swap 分区与内存优化。rmem_max = 8388608(8M):UDP 大流量时默认缓冲区(约 200KB)会丢包。调到 8M,游戏数据传输更稳。三、高并发 Web 服务器参数W[...]
2026-10-13 回复
[...]free -h # 看内存修复:加 Swap(Swap 分区与内存优化有完整教程),或者升级内存。2G 内存别跑方舟,4G 起步。二、网络类报错(占比最高)2.1 自己能进、好友进不来十有八九是端口没放行。NAT 型云服务器还要过一道 NAT 映射,顺序排查:# 第一层:服务端真的在监听吗[...]
2026-10-14 回复
2026-10-15 回复
[...]sudo systemctl start palworld存档目录:Pal/Saved/SaveGames/,世界进度、玩家、公会全在里面。游戏大版本更新经常改存档格式,升级前必须备份,备份策略见服务器备份与快照策略和游戏服务器数据备份与恢复。九、常见问题现象原因与解法服务端起不来缺 32 位库,回到第一节装依赖自己人能进、外人进不来8211/UDP 没放行(安全组+ufw 双重检查)玩几小时内存[...]
2026-10-15 回复
[...]echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-palworld.conf详细原理见Swap 分区与内存优化。2.2 内核参数sudo tee /etc/sysctl.d/99-palworld.conf >/dev/null <<'EOF'[...]
2026-10-15 回复
[...]rm -f /tmp/seqtest对照平台标称值:写测试结果能到标称 70% 以上算正常。差距大就开工单问客服。磁盘 IO 是「看不见的性能杀手」:CPU 内存都够,机器照样卡。养成习惯——装完机器先 iostat -xz 1 跑一分钟,知道自己的磁盘什么水平,卡顿时第一个查它。需要现成的游戏云服务器,可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上[...]
2026-10-15 回复
[...]# Restart=alwaysMemoryMax 到了就杀重启——用可控重启代替不可控 OOM,这是生产环境管泄漏进程的标准姿势。Swap 原理见Swap 分区与内存优化。五、容器里的内存泄漏# 看容器内存曲线[...]
2026-10-15 回复
[...]帕鲁是这两年最现象级的开服游戏,也是最容易被配置坑的游戏——官方推荐配置和实际体验差着一条街。这篇用实测数据回答三个问题:最低什么配置能开、多少人开始卡、该买哪一档。测试环境:财富云计算 NAT 型云服务器(无独立公网 IP,价格比独立 IP 机型省一半以上),系统 Ubuntu 22.04 / Windows Server 2022 双测,存档为开服 30 天后的中期档(玩家基地 20+、捕获帕[...]
2026-10-18 回复
[...]每次开新服都要重来一遍:装依赖、建用户、配 Swap、设防火墙、装 SteamCMD、配 systemd……同样的步骤抄十遍,总有一次抄错。这篇把这些固化成一套一键环境脚本:新机器跑一遍,十分钟后就是一个随时可以装任何游戏的标准开服环境。本文基于 财富云计算 NAT 型云服务器(无独立公网 IP、价格比独立 IP 机型省一半以上)的 Ubuntu 22.04 环境编写。脚本可直接抄走,按注释改几个[...]
2026-10-18 回复
[...]MiB Swap: 4096 total, 1024 free, 3072 used. 6501 avail现象诊断对策free 少,buff/cache 高,Swap used ≈ 0健康。Linux 把空闲内存拿来做缓存是本能,不是内存不足不用管Swap used 持续增长物理内存真的不够加 Swap(Swap 优化)或加内存Swap used 高 + wa 高内存在换页,磁盘[...]
2026-10-18 回复
[...]这是本站长期维护的游戏配置与教程总索引。想开服,先在这页搞清楚两件事:你的游戏要吃多少配置、你的系统该看哪篇教程。建议收藏——换游戏、加 MOD、人数变多时,回来核对一遍能省掉大部分"卡爆了"和"连不上"。搭配阅读:还没买服务器?先看购前决策索引(预算分级 / NAT vs 独立 IP / 避坑清单);端口映射看不懂?先看端口速查表(40+ 游戏端口协议一页查清)。一、全游戏配置需求速查表下表按"[...]
2026-10-18 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复