2G 内存边缘服务器被跑满:边缘服务资源规划清单

丁丁智造 · 2026-08-27
2G 内存边缘服务器被跑满:边缘服务资源规划清单
导读:在小规格服务器上堆了一堆服务,结果内存占满、频繁卡顿。本文给出边缘节点的服务取舍、资源预算和排查命令清单。

踩坑场景

一台 2 核 2G 的边缘服务器,同时跑采集、MQTT、时序库、看板、数据库、后台服务……没多久内存吃满、swap 频繁、采集卡顿。根因是没有做资源预算,什么都往上装

先建立“资源预算”意识

部署前列出每个服务的大致内存占用并求和,给系统和突发留出 30% 余量。粗略经验(具体以实测为准):

  • 操作系统本身:数百 MB
  • Mosquitto:很轻,十几~几十 MB
  • Node-RED/Neuron:几十~一两百 MB
  • EMQX:比 Mosquitto 重,全功能运行占用更高
  • 时序库:随数据量和缓存配置增长,是内存大头
  • Grafana:渲染时内存上升明显
  • JVM 类服务(Java):起步内存就较高,小内存机要谨慎

边缘侧的取舍原则

边缘只做该在边缘做的事:采集、协议转换、断网缓存、轻量实时逻辑。重的分析、可视化、历史长存储尽量放到中心服务器。

  • 小盒子:Neuron/采集 + Mosquitto 即可,别上 EMQX 集群和 Grafana
  • 时序库放边缘时,调小其内存缓存参数、缩短本地保留期
  • 能合并的服务合并,减少进程数量

排查命令清单(Linux)

free -h                 # 整体内存/swap
top                     # 实时看谁占内存/CPU(按 M 按内存排序)
ps aux --sort=-%mem | head   # 内存占用 Top 进程
df -h                   # 磁盘是否写满
systemctl status 服务    # 服务状态
journalctl -u 服务 -f    # 实时日志

常见“隐形”内存消耗

  • JVM 默认堆偏大,用 -Xmx 显式限制
  • 日志不轮转,磁盘被写满进而引发各种异常
  • 时序库缓存参数默认值对小机器过大
  • 开了不需要的插件/功能模块

稳妥的部署建议

  1. 画一张服务清单,估算总占用,留足余量
  2. 边缘最小化,重活上收
  3. 每个服务配 systemd 自启和内存上限(按需)
  4. 配日志轮转和磁盘告警
  5. 上线后观察一周真实资源曲线,再决定是否扩容

如果预算允许,跑“采集+消息+时序库+看板”一整套,2 核 4G 会比 2G 从容很多;2G 更适合做纯采集边缘节点。