我在Linux服务器上运行了一个演示程序,它消耗了相当多的CPU和内存使用量。这些参数会根据正在运行的演示的负载而不断变化。我想定期提取CPU使用率和内存使用量,即每3-4秒一次,并创建提取结果的图。
将流程视为“正在运行演示”,在我输入的终端上输入:
ps aux |grep Running Demo | awk '{print $3 $4}'
这为我提供了Running Demo的CPU和内存使用情况。但我想要接下来的两件事,即 1)每3-4秒输出一次该结果。 2)制作生成结果的图表。
任何帮助或建议都将受到高度赞赏。我是这个社区的先驱。
由于
答案 0 :(得分:4)
您要做的事情是众所周知的现有项目:
请参阅Munin
示例
注意强>
ps aux |grep Running Demo | awk '{print $3 $4}'
但ps auxw | awk '/Running Demo/{print $3 $4}'
gnuplot
,请参阅护目镜搜索的前三名http://blah.token.ro/post/249956031/using-gnuplot-to-graph-process-cpu-usage 答案 1 :(得分:0)
以下python脚本接受输出文件名(png)和一个或多个pid。当你按ctrl-C它停止并使用gnuplot生成一个漂亮的图形。
#!/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()