`
skandhas
  • 浏览: 34997 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

使用Ruby统计某个进程CPU占用的情况(Ubuntu)

    博客分类:
  • Ruby
阅读更多

      最近公司的一个移植项目有个任务,要测量我们的程序在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
 

 

 

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics