Monit配置服务级自动重启最稳妥:通过监控单进程totalmem、CPU等指标,结合for N cycles防抖动,精准触发restart,避免系统级内存误判。需配置pidfile或matching匹配进程,配合日志、告警和Web控制台。

直接用 Monit 配置服务级自动重启是最稳妥、最常用的做法。它不依赖全局内存阈值,而是聚焦进程自身行为(比如内存持续增长),避免误杀其他健康服务,也比写 shell 脚本 + cron 更精准可靠。
安装并启用 Monit
在主流发行版上安装非常快:
- Ubuntu/Debian:sudo apt update && sudo apt install -y monit
- RHEL/CentOS(需 EPEL):sudo yum install -y epel-release && sudo yum install -y monit
启用服务并开机自启:
sudo systemctl enable --now monit
默认配置文件是 /etc/monit/monitrc(部分旧版本为 /etc/monitrc),修改前建议先备份。
配置服务内存监控与自动重启
以一个 Python Web 服务(如运行在 systemd 下的 myapp.service)为例,在 /etc/monit/monitrc 末尾添加:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
check process myapp with pidfile /var/run/myapp.pid start program = "/bin/systemctl start myapp.service" stop program = "/bin/systemctl stop myapp.service" if totalmem > 800 MB for 3 cycles then restart if cpu usage > 95% for 5 cycles then restart if not running then restart group app
说明:
-
totalmem > 800 MB:监控该进程**总内存占用**(RSS + 缓存等),超过 800MB 持续 3 次检测(按默认 30 秒间隔即约 90 秒)就触发重启 -
for N cycles是关键——避免瞬时抖动误判,比“单次超限就重启”更稳 - 确保
pidfile路径与服务实际一致;若服务不用 pidfile,可用matching "python.*myapp.py"替代
补充:配合日志与告警(可选但推荐)
在 monitrc 全局段加入:
-
set logfile /var/log/monit.log:记录每次重启原因,排障必备 -
set alert admin@company.com on { instance, resource }:邮件通知异常(需提前配好本地 MTA 或 SMTP) -
set httpd port 2812 and allow admin:YourStrongPassword:开启 Web 控制台,浏览器访问http://ip:2812可实时查看状态
改完配置后重载:sudo monit reload
为什么不推荐“系统级内存超限就重启服务”?
有些方案用 free 或 /proc/meminfo 判断整体内存使用率,再 systemctl restart xxx ——这存在明显缺陷:
- 无法区分是哪个服务泄漏,可能误重启无关进程
- Linux 的
available内存含大量可回收缓存,单纯看百分比容易误报 - 脚本轮询有延迟,且缺乏进程上下文(比如某 Java 进程 RSS 从 500MB 涨到 1.2GB,这才是真风险)
Monit 直接读取 /proc/PID/status 中的 VmRSS 和 VmSize,能真实反映单个服务的内存行为,更适合定位和响应泄漏风险。

















