IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

监控进程

火丁笔记 2015-02-14 14:09:19 累计浏览 2,778 次
本机暂存

   有时候,进程突然终止服务,可能是没有资源了,也可能是意外,比如说:因为 OOM 被杀;或者由于 BUG 导致崩溃;亦或者误操作等等,此时,我们需要重新启动进程。

   实际上,Linux 本身的初始化系统能实现简单的功能,无论是老牌的 SysVinit,还是新潮的 Upstart 或者 Systemd 均可,但它们并不适合处理一些复杂的情况,比如说:CPU 占用超过多少就重启;或者同时管理 100 个 PHP 实现的 Worker 进程等等,如果你有类似的需求,那么可以考虑试试 MonitSupervisor,相信会有不一样的感受。

   让我们看看 Monit 的用法,假设我们要监控 Nginx 进程,一旦其 CPU 使用率连续 5 次超过 80% 的话,就重启进程,此时就可以按照如下方式设置:

check process nginx with pidfile /var/run/nginx.pid
    start program = "/etc/init.d/nginx start"
    stop program  = "/etc/init.d/nginx stop"
    if cpu is greater than 80% for 5 cycles then restart

   Monit 根据 pidfile 轮询对应的进程是否健在,满足条件就执行 start/stop 等操作。如果进程本身不存在 pidfile,那么也可以使用 matching 语法来匹配进程。

   再让我们看看 Supervisor 的用法,假设我们要监控 100 个 PHP 实现的 Worker 进程,用来提供 Gearman 之类的服务,由于 PHP 本身运行模式的缘故,为了避免严重的内存泄漏问题,我们设定 PHP 进程服务一定次数或一段时间后就自动退出,这时候我们需要启动新的 Worker 进程,以便总数维持不变,此时就可以按照如下方式设置:

[program:worker]
command=/usr/bin/php /path/to/worker.php
process_name=%(program_name)s_%(process_num)02d
numprocs=100
autostart=true
autorestart=true

   如果说 Supervisor 有什么缺点的话,那么首当其冲的是对使用者而言它不够透明:很多进程都是后台运行的,但 Supervisor 却要求必须改成前台运行。好在多数服务都提供了对应的配置选项,如果没有的话,我们也可以使用一些变通的方法:

SU:2345:respawn:/usr/bin/supervisord -c /etc/supervisord.conf

   改好后运行「init q」命令让其生效,然后 kill 掉 supervisor 进程看看会不会发生奇迹。

   注意:记得事先我们要配置 Supervisor 为 nodaemon=true 噢。

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. WEB系统需要关注的一些点 (累计阅读 18,219)
  2. 批量添加主机到cacti+nagios的监控报警系统中 (累计阅读 14,994)
  3. 我常用的主机监控shell脚本 (累计阅读 13,434)
  4. ps 命令常见用法 (累计阅读 9,504)
  5. Cacti 添加 Apache 监控 (累计阅读 9,245)
  6. 查看 CPU, Memory, I/O and NetFlow (累计阅读 8,135)
  7. Linux上进程的表示以及入门 (累计阅读 7,744)
  8. 读腾讯大讲堂 (累计阅读 6,149)
  9. 通过『iostat -dx 1』命令监控IO性能 (累计阅读 5,173)
  10. 让进程在后台可靠运行的几种方法 (累计阅读 5,144)