`
pypy
  • 浏览: 92408 次
  • 性别: 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()

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


分享到:
评论

相关推荐

    Linux下如何查看某一进程的CPU占用率_linux进程cpu使用率.zip

    这一过程涉及到对系统监控工具的使用,理解进程与CPU之间的交互,以及如何解析输出信息。下面将详细介绍如何在Linux环境下查看某一进程的CPU占用率。 1. **使用`top`命令** `top`命令是最常用的实时监控系统资源的...

    Linux进程管理之“四大名捕”

    Linux进程管理是系统管理中的一个重要组成部分,它涉及到进程的创建、调度、监控和终止等多个方面。本文将通过类比武侠小说《四大名捕》中的角色,介绍Linux环境下四个常用的进程管理命令:ps、dstat、top和htop。这...

    linux查看进程指令

    在Linux操作系统中,掌握进程管理的基本技能是必不可少的。本文将深入探讨如何使用各种命令来查看和管理Linux系统上的进程,这些技巧对于系统管理员、开发者以及任何需要深入了解系统活动的人来说至关重要。 ### ps...

    查看LINUX进程内存占用情况

    Linux 操作系统中查看进程内存占用情况是系统管理员和开发人员日常任务中非常重要的一部分。通过查看进程内存占用情况,可以了解系统中进程的资源占用状况,故障排查和性能优化。下面是查看 LINUX 进程内存占用情况...

    Linux教程-linux进程管理.docx

    本教程将深入探讨Linux进程管理及其相关的工具,帮助用户更好地理解和控制系统的运行状态。 1. **进程概念与类型** - **进程**:是操作系统中正在运行的程序的实例,每个进程都有一个唯一的进程ID(PID)。 - **...

    linux查看进程启动时间以及累计运行时间_linux进程

    在Linux操作系统中,管理和监控进程是系统管理员日常工作中不可或缺的一部分。了解如何查看进程的启动时间和累计运行时间对于排查系统性能问题、优化资源分配以及调试程序至关重要。本文将深入探讨Linux中查看这些...

    htop-一款针对linux的进程监控软件

    htop是一款强大的Linux系统监控工具,它以全彩色的界面显示了系统进程的状态,提供了更为直观和详尽的视图,使得系统管理员可以更轻松地监控和管理Linux系统的运行状况。这款工具是top命令的增强版,具备了更多实用...

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

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

    Qt实现Linux任务管理器SysMonitor.zip

    总的来说,SysMonitor项目展示了如何利用Qt的强大功能来创建一个功能完善的Linux任务管理器,涵盖了进程监控、内存和CPU信息的获取与展示等多个方面。对于学习Qt编程和Linux系统管理的开发者来说,这是一个有价值的...

    进程管理器,运行管理

    许多操作系统提供了用户界面友好的进程管理器工具,如Windows的任务管理器,Linux的top或htop命令,它们可以让用户查看系统中当前运行的进程,包括进程ID、CPU占用率、内存使用情况、进程的启动时间等信息,并允许...

    linux 下的任务管理器

    在Linux操作系统中,任务管理器是一个至关重要的工具,它允许用户监控系统性能、管理进程以及进行资源调度。本文将深入探讨“Linux可视化QT任务管理器”的相关知识点,它使用QT库来实现用户友好的图形界面。 首先,...

    linux /proc 文件 系统监控器 GTK

    总的来说,"linux /proc 文件系统监控器 GTK"是一个实用的工具,能够帮助Linux用户更好地理解系统的运行状态,及时发现和解决问题,提高系统管理和维护的效率。通过其友好的图形界面,使得监控系统状态变得更加简单...

    Python Linux系统管理与自动化运维

    本篇将深入探讨如何利用Python来构建命令行工具,以及如何监控Linux系统。 一、Python在Linux系统管理中的应用 1. 自动化脚本:Python可以编写简洁的脚本来执行常见的系统管理任务,如文件操作、用户管理、网络...

    基于python的Linux系统指定进程性能监控

    使用Python进行Linux进程监控的好处包括易于编程、丰富的第三方库支持以及与现有系统的集成能力。这种方法可以灵活地扩展以适应各种监控需求,例如添加对网络带宽、磁盘空间等其他性能指标的监控。 总的来说,这个...

    理解Linux进程的内存使用量

    本文将深入探讨Linux进程内存使用的核心概念,以及如何正确解读`ps`命令提供的VSZ和RSS指标。 首先,我们来看一下Linux内存模型。Linux内存管理采用了虚拟内存的概念,这意味着每个进程都有自己的虚拟地址空间,它...

    qt 实现的linux任务管理器

    在Linux操作系统中,任务管理器是一个至...通过这个项目,开发者不仅可以深入理解Linux进程管理,还能掌握Qt库的使用技巧,提高跨平台应用开发能力。在实际操作中,应注重代码的可读性和可维护性,以及用户体验的优化。

    Linux下进程源代码: top, Ps

    学习`top`和`ps`的源代码对于理解Linux进程管理、系统资源监控和性能优化有着重要作用。它可以帮助开发者更好地调试程序,优化系统性能,或者开发出更符合特定需求的监控工具。此外,对这些基础工具的源代码分析也是...

    Linux进程和线程的基本编程、通讯和例程1

    总的来说,Linux进程和线程的编程涉及到多个层面,从基础概念到高级应用,都需要深入理解和实践。学习过程中,可以通过阅读官方文档、博客文章和开源项目来积累经验。同时,掌握有效的调试技巧和工具,能够帮助我们...

    进程、端口查看、管理工具

    在IT领域,管理和监控系统进程以及网络端口是日常维护工作的重要组成部分。这些工具帮助我们了解系统的运行状态,排查问题,以及优化系统性能。本文将详细介绍如何使用各种进程和端口查看、管理工具。 首先,我们...

Global site tag (gtag.js) - Google Analytics