监控进程

标签: Technical Linux | 发表时间:2015-02-11 08:08 | 作者:老王
分享到:
出处:http://huoding.com

有时候,进程突然终止服务,可能是没有资源了,也可能是意外,比如说:因为 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 却要求必须改成前台运行。好在多数服务都提供了对应的配置选项,如果没有的话,我们也可以使用一些变通的方法:

不管用什么来监控进程,如果监控者本身挂了,那么被监控者无疑就失控了。此时需要考虑如何监控监控者本身,这似乎是一个递归问题,不过文章开头我们说过,Linux 本身的初始化系统就能实现简单的监控功能,以 SysVinit 为例,编辑 /etc/inittab 文件:

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

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

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

相关 [进程] 推荐:

监控进程

- - 火丁笔记
有时候,进程突然终止服务,可能是没有资源了,也可能是意外,比如说:因为 OOM 被杀;或者由于 BUG 导致崩溃;亦或者误操作等等,此时,我们需要重新启动进程. 实际上,Linux 本身的初始化系统能实现简单的功能,无论是老牌的 SysVinit,还是新潮的  Upstart 或者  Systemd 均可,但它们并不适合处理一些复杂的情况,比如说:CPU 占用超过多少就重启;或者同时管理 100 个 PHP 实现的 Worker 进程等等,如果你有类似的需求,那么可以考虑试试 Monit 和 Supervisor,相信会有不一样的感受.

Linux进程关系

- - 博客园_首页
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. Linux的进程相互之间有一定的关系. 比如说,在 Linux进程基础中,我们看到,每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构. 我们在这里讲解进程组和会话,以便以更加丰富的方式了管理进程.

进程互斥与竞态

- MadFrog - 博客园-首页原创精华区
在linux编程中,经常有这样的要求:特定进程(尤其是daemon进程)有且只有一个,即特定资源只能由一进程拥有. 问题是:如何保证特定进程间的“互斥”关系(只有一个实例). 当检测到“互斥(锁定)”时,其余进程可直接退出,而无需同步. 互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性.

进程监控脚本

- - CSDN博客架构设计推荐文章
# 如果不存在, 就重启他. 作者:ahyswang 发表于2014-10-11 22:34:45 原文链接. 阅读:111 评论:0 查看评论.

进程隐藏与进程保护(SSDT Hook 实现)(一)

- Bloger - 博客园-首页原创精华区
应用层调用 Win32 API 的完整执行流程:. 前面一篇博文呢介绍了代码的注入技术(远程线程实现),博文地址如下:. 虽然代码注入是很老的技术了,但是这种技术也还是比较常见,. 当然也比较好用的,比如在 Spy++ 中就使用了远程线程注入技术,. 同时,如果有兴趣的阅读过 Spy++ 的源码的朋友,当然也可以在其源码中阅读到关于远程线程注入技术了.

进程隐藏与进程保护(SSDT Hook 实现)(二)

- Bloger - 博客园-首页原创精华区
引子 – Demo 实现效果:. SSDT Hook 框架搭建:. 隐藏进程列表和保护进程列表的维护:. 引子 – Demo 实现效果:. 上一篇《进程隐藏与进程保护(SSDT Hook 实现)(一)》呢把 SSDT 说得差不多了,. 不过呢,那也只是些理论的东西,看不到什么实物,估计说来说去把人说晕了后,也没什么感觉,.

Linux中如何杀掉僵尸进程

- Fornote - C++博客-首页原创精华区
  1) 检查当前僵尸进程信息.   执行上面获得的语句即可, 使用信号量9, 僵尸进程数会大大减少..   3) 过一会儿检查当前僵尸进程信息.   发现僵尸进程数减少了一些, 但还有不少啊..   4) 再次获得杀僵尸进程语句.   执行上面获得的语句即可, 这次使用信号量18杀其父进程, 僵尸进程应该会全部消失..

Ubuntu 12.04/12.10/13.04发布进程公布

- mingshuai - cnBeta全文版
虽然Oneiric Ocelot Ubuntu 11.10还停留在Alpha预览测试阶段,尚未进入Beta测试,但是Ubuntu Wiki上今天已经公布了后续三个版本Ubuntu 12.04、12.10、13.04的详细发布进程. 其实Ubuntu 12.04的代号都尚未选定,Ubuntu 12.10、13.04的代号就更没影了,不过按惯例肯定分别是“Pxxxx Pxxxx”、“Qxxxx Qxxxx”、“Rxxxx Rxxxx”的形式.

Mozilla将支持标签独立进程

- Yupeng - Solidot
Mozilla Web平台主管Chris Blizzard在博客上发表文章称,Firefox将支持标签独立进程. 多进程架构已为主流浏览器普遍采用,如Firefox支持独立插件进程,但Chrome和IE9则进一步支持独立标签进程. Mozilla从2009年开始探索独立进程浏览方式,它的长期目标也是独立标签进程.

Python 多进程日志记录

- Guancheng(冠诚) - qingbo.blog
刚开始用 Python 做 web 开发的时候我就想一个问题,如果 Python 应用需要自己记录一些比 accesslog 更详细的日志(使用 Python 的 logging module),又有多个进程,怎么办最好呢. 多个进程往同一个日志文件写入会不会出问题. 最近有个在 Apache 里用 mod_wsgi 运行的程序,设置了4个 process.