跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

利用 Superlance 插件增强 Supervisor 进程监控能力

Superlance 是基于 Supervisor 事件机制开发的 Python 工具集,用于增强进程监控与管理能力。如何通过 pip 安装 Superlance,并利用其提供的 httpok、crashmail、memmon 等工具实现 HTTP 接口健康检查、进程崩溃邮件告警及内存占用阈值监控。配置过程中重点讲解了 Supervisor eventlistener 的绑定方式,包括 PROCESS_STATE_EXITED 事件捕获与 TICK_60 周期性检测。实战案例展示了在进程异常退出或内存泄漏场景下,如何自动触发告警或重启服务,从而提升系统的稳定性与可维护性。

steve发布于 2025/2/4更新于 2026/7/1833 浏览
利用 Superlance 插件增强 Supervisor 进程监控能力

Supervisor 与 Superlance 简介

Supervisor 是一款用 Python 编写的进程管理工具,支持多种 UNIX-like 操作系统。它不仅能启动、守护和管理大量进程,还提供事件机制与 XML-RPC API,方便扩展功能。

Superlance 则是基于 Supervisor 事件机制实现的一系列命令行工具集。它弥补了 Supervisor 原生功能的不足,提供了内存监控、HTTP 接口检测、邮件和短信通知等实用特性。同样使用 Python 编写。

安装 Superlance

作为 Python 包,Superlance 安装非常简单。推荐使用 pip:

pip install superlance

也可以通过 easy_install 或从 GitHub 源码编译安装:

python setup.py install

安装完成后,执行 httpok 命令验证是否成功。若命令存在,说明环境已就绪。

Superlance 核心组件

Superlance 包含多个命令行工具,常用如下:

  • httpok:定时对 HTTP 接口发起 GET 请求,根据响应状态判定进程健康度,异常时自动重启。
  • crashmail:进程意外退出时发送邮件告警。
  • memmon:监控进程内存占用,超过阈值时发送告警。
  • crashmailbatch:类似 crashmail,但会将一段时间内的告警合并发送,避免邮件轰炸。
  • fatalmailbatch:针对多次启动失败进入 FATAL 状态的进程进行合并报警。
  • crsms:通过邮件网关发送短信告警。

实战配置

在正式使用前,需确保系统安装了 sendmail 以支持邮件发送:

sudo apt-get install sendmail
1. 进程崩溃邮件告警 (crashmail)

我们需要配置一个 Supervisor 监听器来捕获进程退出的事件。以下是一个示例配置:

[program:top]
command=top -b
process_name=%(program_name)s
numprocs=1
directory=/tmp
umask=022
priority=999
autostart=false
autorestart=false
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
redirect_stderr=true

[eventlistener:crashmail]
command=crashmail -p top -m [email protected]
events=PROCESS_STATE_EXITED
redirect_stderr=true

这里定义了一个名为 top 的进程,持续输出系统信息。关键在于 [eventlistener] 部分:

  • events=PROCESS_STATE_EXITED:监听从 Supervisor 发出的进程意外退出事件。
  • command=crashmail -p top -m ...:指定仅对名为 top 的进程生效,并设置接收告警的邮箱地址。

配置生效后,访问 Supervisor Web 界面可看到新增的事件监听器。当手动终止 top 进程(如 kill -9 <pid>)后,Supervisor 会触发事件,监听器随即调用 crashmail 发送通知邮件。

2. 内存泄漏监控 (memmon)

除了存活检测,Superlance 还能监控资源使用情况。下面是一个简单的内存泄漏测试脚本:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import time

class LeakTest(object):
    def __init__(self):
        print 'Object with id %d born here.' % id(self)

    def __del__(self):
        print 'Object with id %d dead here.' % id(self)

def doLeak():
    A = LeakTest()
    B = LeakTest()
    A.b = B
    B.a = A

if __name__ == '__main__':
    while True:
        for i in range(1, 10000):
            doLeak()
        time.sleep(5)

该脚本会不断创建对象并互相引用,导致内存持续增长。我们可以配置 memmon 来应对这种情况:

[program:memoryleak]
command=python /home/xmxjq/supervisord/samples/memoryleak.py
process_name=%(program_name)s
numprocs=1
directory=/tmp
umask=022
priority=999
autostart=false
autorestart=false
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
redirect_stderr=true

[eventlistener:memmon]
command=memmon -p memoryleak=1MB -m [email protected]
events=TICK_60
redirect_stderr=true

注意这里的 events=TICK_60,表示每 60 秒触发一次检查。配置中设定 memoryleak 进程的内存上限为 1MB。一旦超过该值,不仅会发送邮件告警,还会自动重启进程,防止系统资源耗尽。

运行一段时间后,若内存占用超标,即可收到告警邮件,同时进程 uptime 重置,表明已成功重启。

总结

Superlance 通过丰富的命令行工具扩展了 Supervisor 的能力,使其能更好地适应生产环境的监控需求。更多工具的使用细节,建议参考官方文档进行深入学习。

目录

  1. Supervisor 与 Superlance 简介
  2. 安装 Superlance
  3. Superlance 核心组件
  4. 实战配置
  5. 1. 进程崩溃邮件告警 (crashmail)
  6. 2. 内存泄漏监控 (memmon)
  7. -- coding: utf-8 --
  8. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 医疗 AI 可信系统:向量索引与贝叶斯网络实战
  • 鸿蒙金融理财全栈项目:生态合作与用户运营优化
  • Generative UI 重塑 AI 时代前端交互实践
  • 快速排序算法原理与多种实现方式详解
  • 二级 Python 考试基本操作题真题与参考代码汇总
  • 基于 Z-Image Turbo 的电商海报极速生成实战
  • JavaScript 常用 DOM 操作函数:appendChild 与 removeChild
  • Linux 文件本质揭秘:从磁盘文件到一切皆文件
  • Linux 环境变量详解与实战
  • Linux 进程池实战:基于管道通信的任务分发系统实现
  • 基于 Python 和 Uniapp 的高校科研经费管理系统设计与实现
  • Midreal AI 工具深度解析:交互式小说生成与插图创作实践
  • C++ 二叉搜索树实现详解
  • C++ 数据结构与算法:定义、递归与迭代比较
  • Android 传感器全解:注册监听与常用传感器应用
  • Linux 进程间通信:命名管道(FIFO)实战指南
  • Python 自学指南:培养良好编程习惯与避坑建议
  • Web 可访问性最佳实践:构建人人可用的前端界面
  • AI 如何重构智能家居:从指令执行到主动理解
  • 前端大文件处理内存优化实战方案

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online