快速业务通道

找出UNIX中最费CPU的进程

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-01

多用户的UNIX计算机系统在运行过程中,有时会感觉到运算速度突然慢下来,有时甚至连从键盘输入字符也得过好久才会有反应.有经验的人一定会知道,这时计算机中一定在运行一个非常耗费CPU的进程.这样的进程有时是某个人在执行一个很占CPU的程序,有时则可能是系统中出了意外情况,系统本身在进行处理.无论是哪种情况,系统管理员都应及时找出这样的进程,并做出相应的处理.

  UNIX虽然提供了“acct”等一系列记账程序,但这些程序只能在进程结束后才能显示运行时间和占用CPU时间等信息,不能实时计算单位时间内哪一个进程占用CPU时间最多.

  为此本人用shell语言编写了一段程序,利用UNIX提供的一些实用程序,实现了上述功能.

  此段程序中包含ps、cut、diff等UNIX实用程序,下面先简单介绍一下这些实用程序的功能.

  ps:用来显示当前系统中进程的有关信息.用-e参数则显示系统中所有进程的信息.使用-f参数则显示各进程完整的信息;

  cut:用于以列为单位对文件进行剪裁.参数“-c -15,33-”表示把输入文件每行前15个字符及第33个字符以后直到行尾的所有字符放入输出文件;

  echo:用于向屏幕上显示提示信息;

  sleep:可以让shell程序等待若干秒,然后再执行后面的语句;

  diff:用于对两个文件进行比较,不同之处则显示出来;

  sort:可对文件中的各行进行排序,排序结果可显示出来;

  grep:可用来找出文件中满足一定条件的行.参数“^”表示找出第一列为空格的各行;

  |:为管道的符号,可实现把前面命令的输出作为后面命令输入的作用,这样就可省略生成中间文件的步骤,提高执行效率;

  >:表示对输出进行重定向,把本来应显示在屏幕上的东西输出到文件中.

  程序内容如下:

  ps -ef|cut -c -15,33->tt1

  echo Please wait a while...

  sleep 20

  ps -ef|cut -c -15,33->tt2

  echo Attention !

  echo

  diff tt1 tt2|cut -c 2->tt3

  sort tt3|grep ^ |cut -c -83|grep -v 0:00

  echo

  echo That is ok!

  rm tt1 tt2 tt3

  程序取得系统中所有进程的信息并把其中有用的字段放入临时文件tt1中.接着让程序等待20秒(时间可依具体情况进行调整).

  然后再一次取得所有进程的信息,并把所有的字段放入临时文件tt2中.

  对两个临时文件进行比较,找出20秒前后信息不同的那些进程(其中就有消耗CPU时间已经发生了变化的进程).

  去掉进行比较时产生的“>”和“<”,把结果放入临时文件tt3中.

  对tt3中的内容进行排序,把耗费CPU时间发生变化的同一进程的前后信息排在一起.grep“^”则是用来去掉执行此shell程序时产生的一些中间命令进程的信息.

  再用cut删去每行中过长的进程信息,使输出更加清晰.而grep -v 0:00则用来去掉20秒前后只出现一次的进程.程序执行至此,在20秒前后耗费CPU时间不同的进程就显示在屏幕上了,从中可以很容易地找出所要找的进程.为了不在系统中留下无用的垃圾文件,还要把三个临时文件全都删去.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号