使用 systemd 为 AI 网关服务设置内存上限:从高峰占用到 6GB 硬限制
背景 某台小型 Linux 主机上运行着一个 AI 代理网关服务。该服务平时占用并不高,但在运行一段时间后,systemctl status 显示历史内存峰值曾达到约 5.5GB。 状态中可以看到类似结构: 这说明服务并不是单一进程,而是由主进程和若干子进程共同组成。若只限制某个 Node 进程,无法可靠覆盖整个服务组。更合理的方式是使用 systemd cgroup 资源限制,对整个 service 统一设置内存上限。 问题 该主机总内存约为 8GB,且没有启用 swap。AI 网关服务如果在高负载或异常情况下继续增长内存占用,可能导致系统进入异常状态,例如: 因此,需要给该服务设置一个最大内存使用上限。 目标不是修改应用源码,也不是给应用打补丁,而是通过系统服务管理器限制资源使用。 方案选择 最终采用的是 systemd 用户级 service drop-in 配置。 这种方式的特点是: 也就是说,这不是“打补丁”,而是系统层面的标准资源控制。 配置目标 最终设置为: 含义如下: 启用内存统计,让 systemd 记录该服务的内存使用情况。 软限制。服务内存超过 5GB 后,systemd 会开始施压、回收、限速,尽量避免继续膨胀。 硬限制。整个服务 cgroup 的内存占用不能超过 6GB。主进程和子进程合计计算。 如果服务因超出内存限制触发 OOM,systemd …