zoukankan      html  css  js  c++  java
  • 找出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中文网-原创文章,转载请注明出处。

  • 相关阅读:
    uva 10491 Cows and Cars
    uva 10910 Marks Distribution
    uva 11029 Leading and Trailing
    手算整数的平方根
    uva 10375 Choose and divide
    uva 10056 What is the Probability?
    uva 11027 Palindromic Permutation
    uva 10023 Square root
    Ural(Timus) 1081. Binary Lexicographic Sequence
    扩展欧几里得(求解线性方程)
  • 原文地址:https://www.cnblogs.com/clarke/p/5454456.html
Copyright © 2011-2022 走看看