`
pypy
  • 浏览: 90707 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

如何友好的 监控与管理 Linux 进程

阅读更多
在做视频编解码的程序,需要fork子进程去调用转码的tools做encode, 这里面就需要能很好的控制进程,让进程类似于跑在沙漏里面,安全,可控的运行,

实现进程的管理接口,其实比较简单的,所有的进程信息来源,均来自 /proc 文件系统

因为是所有进程相关的信息都是通过读取内存proc文件系统,所以没有任何性能问题,

tommy@tommy-desktop:~$ cd /proc/
tommy@tommy-desktop:/proc$ ls
1     1176   13    1340  14    1451   15736  20444  20460  240  33    43  59   636  756  8     9299       crypto       irq            modules       swaps
10    11887  1300  1346  1402  1461   16     20445  20461  25   34    44  594  640  76   80    9305       devices      kallsyms       mounts        sys
1025  12     1306  1347  1404  1462   1675   20446  20462  257  35    45  596  641  760  81    9319       diskstats    kcore          mtrr          sysrq-trigger
1085  1214   1309  1352  1413  1467   17     20447  20646  26   36    46  598  66   768  82    9321       dma          key-users      net           sysvipc
1091  1232   1310  1358  1414  14734  18     20448  21     27   362   5   6    67   77   828   9323       dri          kmsg           pagetypeinfo  timer_list
1098  1263   1313  1363  1428  1496   19     20449  2164   28   37    51  60   7    770  83    9340       driver       kpagecount     partitions    timer_stats
11    1271   1314  1365  1430  15     2      20450  218    284  38    52  61   70   773  833   acpi       execdomains  kpageflags     sched_debug   tty
1105  1273   1318  1367  1432  151    20     20451  22     287  39    53  618  71   779  84    asound     fb           latency_stats  schedstat     uptime
1134  1277   1325  1370  1433  1517   20439  20453  23     29   4     54  62   716  78   9     buddyinfo  filesystems  loadavg        scsi          version
1135  1285   1327  1376  1436  1520   20440  20454  236    3    40    55  621  72   781  9043  bus        fs           locks          self          version_signature
1136  1287   1333  1381  1441  15355  20441  20457  237    30   4093  56  627  73   784  9045  cgroups    interrupts   mdstat         slabinfo      vmallocinfo
1161  1288   1334  1386  1443  15550  20442  20458  238    31   41    57  630  74   785  9047  cmdline    iomem        meminfo        softirqs      vmstat
1170  1294   1339  1391  1449  15596  20443  20459  239    32   42    58  632  75   79   922   cpuinfo    ioports      misc           stat          zoneinfo
tommy@tommy-desktop:/proc$ 


所以对进程的信息采集,都是可以通过读取/proc文件系统获得

但已经有开源实现如下

A process utilities module

http://code.google.com/p/psutil/


获得当前系统上所有正在运行的进程(pid)

tommy@tommy-desktop:~/workerpool/worker/apps/health$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import psutil
>>> psutil.get_pid_list()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 151, 218, 236, 237, 238, 239, 240, 257, 284, 287, 362, 422, 425, 594, 596, 598, 618, 621, 627, 630, 632, 636, 640, 641, 716, 756, 760, 768, 770, 773, 779, 781, 784, 785, 828, 833, 922, 1025, 1085, 1091, 1098, 1105, 1134, 1135, 1136, 1161, 1170, 1176, 1214, 1232, 1263, 1271, 1273, 1277, 1285, 1287, 1288, 1294, 1300, 1306, 1309, 1310, 1313, 1314, 1318, 1325, 1327, 1333, 1334, 1339, 1340, 1346, 1347, 1352, 1358, 1363, 1365, 1367, 1370, 1376, 1381, 1386, 1391, 1402, 1404, 1413, 1414, 1428, 1430, 1432, 1433, 1436, 1441, 1443, 1449, 1451, 1461, 1462, 1467, 1496, 1517, 1520, 1675, 2164, 4093, 9043, 9045, 9047, 9299, 9305, 9319, 9321, 9323, 9340, 11887, 13354, 14734, 15355, 15550, 15596, 15620, 15621, 15629, 15630, 15735]
>>> 


获得指定进程pid的一些详尽信息以及控制

主要信息是:
1. get_cpu_percent() 获得当前CPU使用百分比

2. get_cpu_times() 获得该进程使用cpu滴答,可以做一些CPU资源限制,比如指定进程能够使用CPU的总时钟滴答,超过可以强制杀掉

3. create_time 获得该进程已经运行的墙上时间,可以做为控制进程运行时间的依据,比如指定进程可以运行的时间timeout

4. get_memory_percent() 获得该进程当前占用内存的情况,可以作为控制进程内存使用量方面的控制

5. is_running 判断该进程是否在running list上

6. suspend() 可以将该进程暂时挂起

7. kill() 用来杀死进程主要是向该进程发送SIGKILL信号,回收资源


>>> p=psutil.Process(20618)
>>> dir(p)
['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_last_kern_time', '_last_sys_time', '_last_user_time', '_procinfo', 'cmdline', 'create_time', 'deproxy', 'get_cpu_percent', 'get_cpu_times', 'get_memory_info', 'get_memory_percent', 'getcwd', 'gid', 'is_proxy', 'is_running', 'kill', 'name', 'parent', 'path', 'pid', 'ppid', 'resume', 'suspend', 'uid', 'username']
>>> p.name
'aptd'
>>> p.cmdline
['/usr/bin/python', '/usr/sbin/aptd']
>>> p.username
'root'
>>> p.create_time
1289453012.6500001
>>> p.get_cpu_percent()
0.0
>>> p.get_cpu_times()
(0.13, 0.39000000000000001)
>>> p.get_memory_info()
(11763712, 17235968)
>>> p.get_memory_percent()
0.76203818681610258


除了针对指定的进程进行监控之外,还可以获得该物理机器的负载信息

1. psutil.cpu_percent() 获得当前物理机器总的CPU使用率

2. psutil.cpu_times() 获得CPUtimes累计使用量,可以用于计费

3. psutil.TOTAL_PHYMEM
psutil.avail_phymem()
psutil.used_phymem()

获得当期机器的物理内存使用情况(以字节为单位)

4. psutil.total_virtmem()
psutil.avail_virtmem()
psutil.used_virtmem()

获得当前机器的虚拟内存使用情况(以字节为单位)


分享到:
评论

相关推荐

    基于Java的Linux运维监控工具Wgcloud设计源码

    系统实现了基于Java的Linux运维监控工具Wgcloud,支持系统硬件信息、内存、CPU、温度、磁盘空间及IO、硬盘SMART、系统负载、网络流量等监控,服务接口监测,大屏展示,拓扑图,端口监控,进程监控,Docker监控,日志...

    Jarboot 是一个强大的Java进程管理、诊断的平台,.rar

    在测试环境、每日构建的集成环境,可以把一系列编译输出等jar文件放入约定的目录,由Jarboot提供友好的浏览器ui界面和http接口,统一管理它的启动、停止及状态的监控,以及执行命令对目标进程进行调试。 通常情况下...

    Jarboot 是一个强大的Java进程管理、诊断的平台.rar

    在测试环境、每日构建的集成环境,可以把一系列编译输出等jar文件放入约定的目录,由Jarboot提供友好的浏览器ui界面和http接口,统一管理它的启动、停止及状态的监控,以及执行命令对目标进程进行调试。 通常情况下...

    Linux操作系统基础教程

    Linux 是在 1991 年发展起来的与 UNIX兼容的操作系统,可以免费使用,它的源代码 可以自由传播且可任人修改、充实、发展,开发者的初衷是要共同创造一个完美、理想并 可以免费使用的操作系统。 我们并不能使同学...

    入门学习Linux常用必会60个命令实例详解doc/txt

    因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown命令,系统管理员会通知所有...

    Linux多线程服务端编程:使用muduo C++网络库

    3.1进程与线程. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 59 3.2单线程服务器的常用编程模型. . . . . . . . . . . . . . . . .. . . . . . . 61 3.3多线程服务器的常用编程模型. . . ....

    vc++ 应用源码包_1

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_2

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_3

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_6

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_5

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    应急响应安服工具火麒麟FireKylin

    FireKylin中文名称叫:火麒麟,其实跟某氪金游戏火麒麟并没有关系,作为国产的网络安全工具名称取自中国神兽:...对安装了监控功能的安全软件的主机来讲是非常友好的,不会对监控软件产生引起“误报安全事件”的命令

    Python灰帽子-黑客与逆向工程师的Python编程之道[简体中文版]

    9.3.4 网络和进程监控 9.3.5 Fuzzing测试以及Sulley的Web界面 第10章 面向Windows驱动的Fuzzing测试技术 10.1 驱动通信基础 10.2 使用Immunity Debugger进行驱动级的Fuzzing测试 10.3 Driverlib——面向驱动的静态...

    vc++ 开发实例源码包

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    streaming-monitor:一个用于监视流事件的闪电应用

    流监控器( ) 此Lightning App可以监视流事件:PushTopic事件,通用事件,标准和自定义平台事件,Change Data Capture事件以及监视事件。 :television: 特征: 订阅所有流事件(自动发现事件类型) 通过用户友好的...

    rod:用于Web自动化和抓取的Devtools驱动程序

    调试友好,自动输入跟踪,远程监控无头浏览器 所有操作都是线程安全的 自动查找或下载 轻巧,没有第三方依赖项,在Linux,Mac和Windows上测试了 高级助手,如WaitStable,WaitRequestIdle,HijackRequests,...

    Hyperf 协程框架 v2.1.10

    Hyperf 还提供了 基于 PSR-11 的依赖注入容器、注解、AOP 面向切面编程、基于 PSR-15 的中间件、自定义进程、基于 PSR-14 的事件管理器、Redis/RabbitMQ 消息队列、自动模型缓存、基于 PSR-16 的缓存、Crontab 秒级...

Global site tag (gtag.js) - Google Analytics