找出1小时内占用cpu最多的10个进程的shell脚本详解程序员

cpu时间是一项重要的资源,有时,我们需要跟踪某个时间内占用cpu周期最多的进程。

在普通的桌面系统或膝上系统中,cpu处于高负荷状态也许不会引发什么问题。但对于需要处理大量请求的服务器来讲,cpu是极其重要的资源。

通过监视某个时期内cpu的使用情况,我们可以找出长期占用cpu的进程并对其进行优化,或调试其它相关问题。

在linux系统中,ps命令用于收集系统中进程的详细信息。这些信息包括cpu使用情况、正在执行的命令、内存使用、进程状态等。记录在一个小时内占用过的cpu的进程,然后通过恰当地运用ps以及文本处理就可以找出占用cpu最多的10个进程。

例子,监视并计算一小时内cpu使用情况的shell脚本。

#!/bin/bash 
# 文件名:pcpu_usage.sh 
# 用途:计算1小时内进程的cpu占用情况 
SECS=3600 
UNIT_TIME=60 
# 将SECS更改成需要进行监视的总秒数 
# UNIT_TIME是取样的时间间隔,单位是秒 
STEPS=$(( $SECS / $UNIT_TIME )) 
echo Watching CPU usage... ; 
for ((i=0;i<STEPS;i++)) 
do 
  ps -eo comm,pcpu | tail -n +2 >> /tmp/cpu_usage.$$ 
  sleep $UNIT_TIME 
done 
echo  
echo CPU eaters : 
cat /tmp/cpu_usage.$$ | / 
awk ' 
{ process[$1]+=$2 } 
END{ 
   for(i in process) 
   { 
     printf("%-20s %s",i, process[i] ; 
   } 
}' | sort -nrk 2 | head 
rm /tmp/cpu_usage.$$ 
#删除临时日志文件

输出结果:
# ./pcpu_usage.sh
Watching CPU usage…
xofr      20
firefox-bin 15
bash      3
evince    2
pulseaudio 1.0
pcpu.sh   0.3
wpa_supplicant 0
wnck-applet 0
watchdog/0  0
usb-storage 0

注解:
以上脚本中,主要的输入源是ps -eo comm,pcpu,其中comm表示命令名(command name),pcpu表示cpu例用率(CPU usae in percent)。该命令输出所有进程名及CPU使用率。每个进程对应一行输出。因为需要监视一个小时内CPU的使用情况,所以我们得在一个每次迭代时间为60秒的循环中不停地使用ps -eo comm,pcpu | tail -n +2来获取CPU的使用统计数据,并将这些数据添加到文件/tmp/cpu_usage.$$中。60秒的迭代时间通过sleep 60来提供。这就使得每一分钟执行一次ps。

tail -n +2用来将ps输出中的头部和COMMAND %CPU剥除。

cpu_usage.$$中的$$表示当前脚本的进程ID。假设进程ID为1345,那么在脚本执行时,它会被替换成/tmp/cpu_usage.1345。因为这是一个临时文件,所以我们把它放在/tmp目录中。

统计文件在1小时后,准备妥当,文件中包含了60项,分别对应每分钟的进程状态。
然后用awk求出每个进程的CPU使用情况。我们用了一个关联数组来统计CPU的使用情况。其中进程名作为数组索引。
最后根据总的CPU使用情况依数值逆序排序,并通过head获得前10项的值,加以输出。

jquery中文网-原创文章,转载请注明出处。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/3063.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论