Linux进程管理工具--God-详解(1)-入门

God是一个由Ruby编写的监控架构,它可以保障你的进程为运行状态,以及可以对一些特殊情况进行进程的重启。拓展可以通过frigga来进行全局god的管理。

最好的安装方式(通过ruby-gems):

gem install god

快速启动

注意:快速启动需要0.12版本以上的,你可以使用以下命令查看版本:

god --version

一个简单的例子:使用god保持一个简单的进程。

下面是一个简单的脚本,名字为hello.py

#!/usr/bin/env python
#
import time

while True:
  print "hello"
  time.sleep(1)

现在写一个god的配置文件来管理上边的hello.py的进程,simple.god:

God.watch do |w|
  w.name = "hello"
  w.start = "python /root/god/hello.py"
  w.keepalive
 end

这是一个简单的god配置,我们首先声明一个God.watch模块,它可以监控、控制上边的进程。每个watch都必须有一个唯一的名字和启动这个进程的命令。keepalive告诉god保证这个进程的存活,如果这个进程死亡了,god会通过上边定义的start来启动进程。

这个simple的例子中,我们将god运行到前端,从而来保证我们可以进行相关的查看。

要运行god,我们需要指定配置文件(-C),以及要求他在前端运行(-D)

god -C simple.god -D

有迹象表明,god的监控流程有2种。1、最好的方式(基于事件),不是每个系统都支持它,但是支持的话会自动使用它。当产生相关事件(退出),god会立即知道。2、对于不支持事件的系统,god会使用轮询机制。PS:我这里是基于事件的机制,由于我这里的限制,没有基于轮询的,如果想看:http://godrb.com/

#Events

I [2014-08-11 11:10:10]  INFO: Loading simple.god
I [2014-08-11 11:10:10]  INFO: Syslog enabled.
I [2014-08-11 11:10:10]  INFO: Using pid file directory: /var/run/god
I [2014-08-11 11:10:10]  INFO: Socket already in use
I [2014-08-11 11:10:10]  INFO: Socket is stale, reopening
I [2014-08-11 11:10:10]  INFO: Started on drbunix:///tmp/god.17165.sock
I [2014-08-11 11:10:10]  INFO: hello move ‘unmonitored‘ to ‘init‘
I [2014-08-11 11:10:10]  INFO: hello moved ‘unmonitored‘ to ‘init‘
I [2014-08-11 11:10:10]  INFO: hello [trigger] process is not running (ProcessRunning)
I [2014-08-11 11:10:10]  INFO: hello move ‘init‘ to ‘start‘
I [2014-08-11 11:10:10]  INFO: hello start: python /root/god/hello.py
I [2014-08-11 11:10:10]  INFO: hello moved ‘init‘ to ‘start‘
I [2014-08-11 11:10:10]  INFO: hello [trigger] process is running (ProcessRunning)
I [2014-08-11 11:10:10]  INFO: hello move ‘start‘ to ‘up‘
I [2014-08-11 11:10:10]  INFO: hello registered ‘proc_exit‘ event for pid 25779
I [2014-08-11 11:10:10]  INFO: hello moved ‘start‘ to ‘up‘

从DEBUG信息中,你可以看出来,hello这个进程起初是没有启动的,而后god将它启动。PS:如果是基于轮询模式启动,你注意观察,他会5秒钟检查一次进程。

为了体现基于事件,我这里多加了一步操作(在别的终端杀掉hello.py,以验证基于事件的形式):

[[email protected] ~]# ps -ef|grep hello.py
root     25779     1  0 11:10 ?        00:00:00 python /root/god/hello.py
root     25803 25782  0 11:10 pts/1    00:00:00 grep hello.py
[[email protected] ~]# kill -9 25779
#Event 状态:
I [2014-08-11 11:11:02]  INFO: hello [trigger] process 25779 exited {:thread_group_id=>25779, :pid=>25779, :exit_code=>9, :exit_signal=>17} (ProcessExits)
I [2014-08-11 11:11:02]  INFO: hello move ‘up‘ to ‘start‘
I [2014-08-11 11:11:02]  INFO: hello deregistered ‘proc_exit‘ event for pid 25779
I [2014-08-11 11:11:02]  INFO: hello start: python /root/god/hello.py
I [2014-08-11 11:11:02]  INFO: hello moved ‘up‘ to ‘start‘
I [2014-08-11 11:11:02]  INFO: hello [trigger] process is running (ProcessRunning)
I [2014-08-11 11:11:02]  INFO: hello move ‘start‘ to ‘up‘
I [2014-08-11 11:11:02]  INFO: hello registered ‘proc_exit‘ event for pid 25807
I [2014-08-11 11:11:02]  INFO: hello moved ‘start‘ to ‘up‘

PS:如果是轮询(Polls)模式,它不是即刻启动,而是等到检查周期的到来。

到这里,你已经知道god如何来保证进程,还有一些更加有空的管理方式,如cpu达到多少重启进程,memory达到多少重启进程等等,下面是一个配置的例子:

God.watch do |w|
  w.name = "hello"
  w.start = "python /root/god/hello.py"
  w.keepalive(:memory_max => 150.megabytes,
              :cpu_max => 50.percent)
  end

详解::memory_max选项属于keepalive的子命令,:cpu_max同样也是。上边的配置中,如果内存达到了150M,或CPU达到了50%,god就回重启进程。默认情况下,这些进程30秒会被检查1次,并且会在(5超3次)的时候重启,以避免偶尔的超载情况。


这里就不在进行模拟内存泄露的情况了,下面贴一个重启cpu的日志,官方文档:http://godrb.com/ 搜memory leak

I [2014-08-11 13:35:46]  INFO: hello [trigger] cpu out of bounds [5.3571428566083%%, *90.3052064640262%%, *94.7069943292977%%, *96.3414634148933%%] (CpuUsage)
I [2014-08-11 13:35:46]  INFO: hello move ‘up‘ to ‘restart‘
I [2014-08-11 13:35:46]  INFO: hello deregistered ‘proc_exit‘ event for pid 26355
I [2014-08-11 13:35:46]  INFO: hello stop: default lambda killer
I [2014-08-11 13:35:46]  INFO: hello sent SIGTERM
I [2014-08-11 13:35:47]  INFO: hello process stopped
I [2014-08-11 13:35:47]  INFO: hello start: python /root/god/hello.py

另外,你可以使用god对一些进程进行操作:

god start hello  #hello为进程名.对应simple.god文件中的w.name
god stop hello
god restart hello
...

所以,当你使用god的管理进程时候,可以自己编写一些特定的配置文件来管理相关的进程。例如:http出错、磁盘io较大等等问题出现时,可以帮助你做一些事。

Linux进程管理工具--God-详解(1)-入门

时间: 2024-11-03 21:43:42

Linux进程管理工具--God-详解(1)-入门的相关文章

Linux进程管理工具 Supervisord 的安装 及 入门教程

Supervisor是一个进程管理工具,官方的说法: 用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了Supervisor 主要就两个命令: supervisord : supervisor的服务器端部分,启动 supervisor 就是运行这个命令 supervisorctl:启动 supervisor 的命令行窗口. 安装(CentOS): 方式一: yum -y install python-

16、Linux软件管理工具rpm详解

1 Linux软件安装概述 安装程序的方式: 软件包概述 RPM RPM的缺点 RPM包 RPM分包 RPM命令的使用 rpm 包管理 升级注意项 如何安装rpm软件包 如何卸载rpm软件包 如何升级rpm软件包 如何查询rpm软件包 如何查看与rpm包相关的文件和其他信息 如何校验rpm包 RPM的数据库 1 Linux软件安装概述 安装程序的方式: 通用二进制格式:直接解压压缩文件,就可以使用.但一定要注意安装平台. 软件包管理器:如RPM. 软件包管理器的前端工具:如YUM. 源代码编译.

Linux进程管理相关命令详解

一.top top命令用于显示系统当前的进程和其他状况:top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果再前台执行该命令,它将独占前台,直到用户终止该程序为止. 其中1-5行为统计信息区,剩余行为进程信息区:1.统计信息区1)第1行为任务队列信息(与uptime命令运行结果相同)字段含义:当前时间     系统启动持续时间   当前登陆用户数    系统负载,即任务队列的平均长度备注:格式为"日期,时:分"  三个数值分别为1,5和15分钟前到现在的均值2)第2行为

17、Linux软件包管理工具yum详解

yum介绍 yum客户端的使用 配置文件项作说明: 案例repo配置文件. 创建yum源命令(yum-config-manager) yum list相关命令 yum安装 yum更新和升级 yum查找和显示 yum删除程序 查看仓库 实战演练本地yum仓库(光盘) YUM内置变量 创建YUM仓库(http) yum介绍 yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安

Linux进程管理工具详解

 进程管理工具 查看进程 pstree  显示进程树 -p:显示PID ps 搜索进程 ps | grep pgrep pidof 系统监控工具 uptime free top 第一行:当前系统时间  系统启动到现在所经过的时间  当前上线用户数  系统在1,5,15分钟的平均负载 相当于uptime命令:交互按键:l 注意:平均负载值越小,系统越空闲:如果高于1,当前系统负载过高 第二行:显示的是目前进程总量与个别程序在什么状态(running,sleeping,stopped,zombie)

Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)【转】

转自:http://blog.csdn.net/gatieme/article/details/51872659 版权声明:本文为博主原创文章 && 转载请著名出处 @ http://blog.csdn.net/gatieme 目录(?)[-] 前景回顾 1 Linux的调度器组成 2 调度工作 进程上下文 1 进程上下文的概念 2 上下文切换 context_switch进程上下文切换 1 context_switch完全注释 2 prepare_arch_switch切换前的准备工作

Linux进程管理工具之top,htop,glances,dstat

借助于本次课程学习外加查阅网上资料,特针对top,glances.dstat做简单介绍. 接触过linux的人都会知道,刚才所述的几个都是与windows中任务管理器一样,只需在命令行中键入这几种命令,就可以定时刷新显示当前系统上各设备使用情况.比如CPU占用百分比.负载,硬盘读写速率,网络传输情况. top 其中显示的从上到下,从左到右各个的含义为: top:当前系统时间: up:系统运行时长: user:当前登陆的用户数: load average:平均负载(逗号隔开的三个数分别为过去一分钟

linux进程管理工具一

内核最强大功能之一就是进程管理,对于system administrator来说,这部分熟练度对于系统调优起着决定性作用.现在我们一起来了解一下linux的进程管理工具吧,在介绍工具之前,有些基本概念要澄清: task struct:Linux内核存储进程信息的固定格式多个任务的的task struct组件的链表:task list MMU:Memory Management Unit  实现线性地址和物理地址的转换(根据task structure)虚拟内存集:可以被换出到swap的地址空间

linux 进程管理工具

进程管理 狭义定义:进程是正在运行的程序的实例. 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元. 进程是操作系统中最基本.重要的概念.是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上. 一.进程的属性: 进程ID(PID):是唯一的数值,用来区分进程: 父进程和父进程的ID(PP