在低内存服务器上运行 Ubuntu 时,避免卡顿的核心思路是:减少非必要资源占用 + 优化系统调度 + 主动管理内存使用。以下是经过验证的实用优化方案:
一、基础系统级优化
1. 关闭不必要的服务
# 查看并禁用非核心服务(按需调整)
sudo systemctl disable --now bluetooth.service
cups.service
avahi-daemon.service
ModemManager.service
snapd.service # 如不需要 Snap 包
# 检查开机自启项
systemctl list-unit-files --state=enabled | grep -v "target"
2. 调整 Swappiness(关键!)
默认 vm.swappiness=60 会频繁交换到磁盘,导致卡顿。改为更保守的值:
# 临时生效
sudo sysctl vm.swappiness=10
# 永久生效
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
✅ 推荐值:1~10(物理内存<2GB 建议设为 1),避免完全禁止 swap(可能导致 OOM Killer 误杀进程)。
3. 优化 ZRAM(替代传统 Swap)
为小内存服务器启用压缩内存作为虚拟内存,速度远快于磁盘 Swap:
# 安装 zram-tools
sudo apt update && sudo apt install zram-tools
# 编辑配置(默认已启用,可自定义大小)
sudo nano /etc/default/zramswap
# 修改:ZRAM_SIZE="512M" 或 "75%"(根据总内存调整)
# 重启生效
sudo systemctl restart zramswap
二、应用层优化
1. 限制单个进程内存使用
- Docker:启动时添加
--memory和--memory-swapdocker run -d --memory=256m --memory-swap=512m your-image - Java 应用:设置
-Xmx参数(如-Xmx256m) - 数据库:MySQL/MariaDB 调整
innodb_buffer_pool_size(建议设为物理内存的 40%~50%)
2. 使用轻量级替代方案
| 场景 | 重型方案 | 轻量替代 |
|---|---|---|
| Web 服务器 | Apache | Nginx |
| 数据库 | MySQL | SQLite / TinyDB |
| 缓存 | Redis | Memcached |
| 监控 | Prometheus+Grafana | Netdata(单二进制文件) |
3. 清理缓存释放内存
定期执行(或写入 cron):
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
⚠️ 注意:仅释放 pagecache/slab,不影响业务数据。
三、监控与预警
实时诊断工具
# 安装轻量监控
sudo apt install htop iotop smem
# 持续观察内存/交换状态
watch -n 5 'free -h && swapon --show'
配置 OOM Killer 策略
防止关键进程被误杀:
# 给重要进程设置更高优先级
echo -100 > /proc/<PID>/oom_score_adj
# 或全局降低敏感度
echo "vm.panic_on_oom=0" | sudo tee -a /etc/sysctl.conf
四、进阶技巧(谨慎使用)
-
内核参数调优(针对高并发场景):
# 增加文件描述符限制 echo "* soft nofile 65535" >> /etc/security/limits.conf echo "* hard nofile 65535" >> /etc/security/limits.conf # 优化 TCP 连接池 echo "net.core.somaxconn = 4096" | sudo tee -a /etc/sysctl.conf - 卸载图形界面(若仅需命令行):
sudo apt remove ubuntu-desktop gnome-shell lightdm sudo reboot
五、验证效果
优化后重点观察:
free -h中available是否稳定 > 总内存的 20%swapon --show显示 Swap 使用率 < 5%htop中无长期接近 100% CPU 或 MEM 的异常进程
💡 最后建议:如果长期内存不足(如 512MB 跑多个服务),优先考虑升级硬件或容器化隔离(Docker Compose 限制各服务资源),而非过度依赖系统调优。
通过以上组合策略,通常可将 512MB~1GB 内存的 Ubuntu 服务器稳定运行基础 Web/API 服务。如需具体场景(如 WordPress/Node.js 部署)的优化细节,可进一步说明需求。
CLOUD技术笔记