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中文网-原创文章,转载请注明出处。

  • 相关阅读:
    【caffe】create_mnist.sh在windows下的解决方案
    【caffe】loss function、cost function和error
    【caffe】未定义函数或变量caffe_
    【caffe】无法找到gpu/mxGPUArray.h: No such file or directory
    maven常见问题处理(3-1)修改maven 默认使用的 jdk 版本
    SpringCloud是什么?
    SpringCloud的服务网关zuul
    SpringCloud的EurekaClient : 客户端应用访问注册的微服务(有断路器场景)
    SpringBoot 概念和起步
    YML(1)什么是 YML
  • 原文地址:https://www.cnblogs.com/clarke/p/5454456.html
Copyright © 2011-2022 走看看