使用Ruby统计某个进程CPU占用的情况(Ubuntu)
时间:2010-07-15 来源:skandhas
最近公司的一个移植项目有个任务,要测量我们的程序在Linux下运行一段时间(约几个小时),看看CPU的占用的情况如何。我的同事(老高)用bash脚本完成了任务。我闲来无事,也顺手用ruby写了一个。
在Linux下取得进程的相关信息,可以使用ps命令。我们可以通过ruby来定时调用ps命令,取得一段时间内的某进程的CPU占用率。 “ps -A” 可以列出所有进程。先看看ps的输出结果:
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 events/0
7 ? 00:00:00 khelper
8 ? 00:00:00 kstop/0
9 ? 00:00:00 kintegrityd/0
10 ? 00:00:00 kblockd/0
11 ? 00:00:00 kacpid
...... (略)
如何取得CPU占用率,可以用 pcpu这个选项。如:“ps -o pcpu -p 11” ,数字11 指的是进程id。我们只要找到目标进程id 的话,就可以用ps这个命令来得到CPU占用率了。
通过分析"ps -A"的输出,我们根据进程的名称(在这个case下,我们要测量的 程序只运行一个实例,所以不存在重名的进程),可以得到目标进程的id。然后进一步就可以得到进程的CPU占用率了,然后把结果以追加的方式重定向到一个 文件中。
ruby的代码如下(代码太短啦,就不解释了):
#! /usr/bin/ruby proc_id = 0 %x(ps -A).each_line do |line| larray = line.split(' ') if(larray[3].downcase =='xxxx') # xxxx is your app's name proc_id = larray[0] break end end while true system "ps -o pcpu -p #{proc_id} >> pcpu.txt" sleep(3) end