首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >定期提取特定进程的CPU使用情况

定期提取特定进程的CPU使用情况
EN

Stack Overflow用户
提问于 2012-12-10 06:19:44
回答 2查看 2.4K关注 0票数 3

我有一个在Linux服务器上运行的演示,它消耗了相当多的CPU和内存。这些参数会根据正在运行的demo的负载不断变化。我想定期提取CPU使用情况和内存使用情况,即每3-4秒,并创建提取结果的曲线图。

考虑到这个过程是“Running Demo",在我输入的终端上:

代码语言:javascript
复制
ps aux |grep Running Demo | awk '{print $3 $4}'

这给了我运行Demo的CPU和内存使用率。但我希望接下来的两件事,即1)让这个结果每3-4秒输出一次。2)将生成的结果作图。

任何帮助或建议都将非常感谢。我是这个社区的初学者。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-10 06:21:51

您正在尝试做的是众所周知的现有项目:

请参阅Munin

示例

笔记

它是由开源社区支持的,所以...

  • 它会运行一些奇怪的命令,比如http://blah.token.ro/post/249956031/using-gnuplot-to-graph-process-cpu-usage

,但

  • 是存在的,并且适用于基本的插件: CPU,内存,固件,Apache和更多的
  • 如果你真的需要ps aux |grep Running Demo | awk '{print $3 $4}',请看goggle http://blah.token.ro/post/249956031/using-gnuplot-to-graph-process-cpu-usage

上排名前三的

票数 4
EN

Stack Overflow用户

发布于 2014-03-23 21:01:30

以下python脚本接受输出文件名(png)以及一个或多个pids。当您按下ctrl-C组合键时,它会停止并使用gnuplot生成一个漂亮的图形。

代码语言:javascript
复制
#!/usr/bin/env python
import os
import tempfile
import time
import sys

def total(pids):
    return [sum(map(int, file('/proc/%s/stat' % pid).read().split()[13:17])) for pid in pids]

def main():
    if len(sys.argv) == 1 or sys.argv[1] == '-h':
        print 'log.py output.png pid1 pid2..'
        return
    pids = sys.argv[2:]
    results = []
    prev = total(pids)
    try:
        while True:
            new = total(pids)
            result = [(new[i]-prev[i])/0.1 for i, pid in enumerate(pids)]
            results.append(result)
            time.sleep(0.1)
            prev = new
    except KeyboardInterrupt:
        pass
    t1, t2 = tempfile.mkstemp()[1], tempfile.mkstemp()[1]
    f1, f2 = file(t1, 'w'), file(t2, 'w')
    print
    print 'data: %s' % t1
    print 'plot: %s' % t2
    for result in results:
        print >>f1, ' '.join(map(str, result))
    print >>f2, 'set terminal png size %d,480' % (len(results)*5)
    print >>f2, "set out '%s'" % sys.argv[1]
    print >>f2, 'plot ' + ', '.join([("'%s' using ($0/10):%d with linespoints title '%s'" % (t1, i+1, pid)) for i, pid in enumerate(pids)])
    f1.close()
    f2.close()
    os.system('gnuplot %s' % t2)

if __name__ == '__main__':
    main()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13792450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档