768M 小内存云服务器别硬扛:加 swap 与省内存四招
前言
很多新手买云服务器图便宜,选了 2 核 768M 的小实例,装两三个服务就开始卡,严重的进程会被系统直接杀掉,服务莫名其妙挂掉。第一反应往往是“配置太小了,升配吧”。其实先做下面四步,很多小实例能稳稳跑起来——我这台 2 核 768M 的新加坡 Flexus 就是这么调的,跑 sing-box 一类轻服务完全够用。
第零步:先确认是不是内存问题
别凭感觉,先看系统有没有因为内存杀过进程:
dmesg | grep -i -E 'oom|killed process'
journalctl -k | grep -i 'out of memory'
判断标准:看到 “Out of memory” 和被杀的进程名,就是内存问题,继续往下做;什么都没看到,就别往内存上折腾,先查 CPU、磁盘、网络。
第一步:加 swap,给系统留条后路
内存不够时,Linux 会直接杀进程(OOM Killer)。加一块 swap,内存爆满时先把不活跃的数据换到磁盘上,服务能活下来——虽然会变慢,但不断线。
加 1G swap(和我这台一样):
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
判断标准:free -h 能看到 Swap 一行、总量 1.0G;重启后还在(fstab 写了就不会丢)。
再调一个参数:swappiness 默认 60,意思是内存用到一定程度就积极用 swap。小内存机器上可以调低到 10,让系统尽量用物理内存、少碰 swap:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
判断标准:cat /proc/sys/vm/swappiness 输出 10。
小提醒:swap 是救命绳不是加速器,频繁读写 swap 说明内存真不够了,长期还是要升配;磁盘空间紧张的机器别把 swap 开太大。
第二步:看清内存到底被谁吃了
free -h
ps aux --sort=-%mem | head -10
判断标准:free 的 available 一栏才是真正能用的内存;ps 排在前面的 RSS 最大的那几个进程就是大头。很多时候吃内存的不是你的服务,是系统自带的一些用不上的东西。
第三步:关掉用不上的服务
小内存机器上,每一个常驻进程都是成本:
systemctl list-unit-files --state=enabled
挑出确认不用的,停掉并禁自启(比如用不上的打印、蓝牙、图形相关服务):
sudo systemctl stop xxx && sudo systemctl disable xxx
判断标准:重启后 free 的 available 比原来多,且你的服务都还在。
注意:不认识的服务别乱关,先查一下它是干嘛的;关之前记下名字,万一出问题能原样开回来。
第四步:给关键服务设内存上限
怕某个服务内存泄漏拖垮整机?用 systemd 的 MemoryMax 给它画条线:
sudo systemctl edit 你的服务名
在打开的编辑器里写:
[Service]
MemoryMax=300M
保存后:
sudo systemctl daemon-reload && sudo systemctl restart 你的服务名
判断标准:systemctl show 你的服务名 -p MemoryMax 能看到 300M;服务超了会被限制,而不是把整机拖死。
没有 systemd 的服务,也可以用 ulimit -v 限制单个进程的虚拟内存,效果粗一些,适合临时兜底。
小结
顺序是:确认是内存问题 → 加 swap 保命 → 看清去向 → 关闲置服务 → 给服务画上限。每次只改一处,改完看 free -h 验证,别一次全改完再排障。
记住 swap 只是缓冲,长期满载还是升配更划算;但在升配之前,这四步能让 768M 的小实例多撑很久。
- 点赞
- 收藏
- 关注作者
评论(0)