Linux下CPU使用率详解

CPU使用率其实就是你运行的程序占用的CPU资源,表示你的机器在某个时间点的运行程序的情况。使用率越高,说明你的机器在这个时间上运行了很多程序,反之较少

Top命令是Linux下常用的系统性能分析工具,能实时查看系统中各个进程资源占用情况

top - 10:02:17 up 14 days, 19:18,  4 users,  load average: 2.11, 2.32, 2.14
Tasks: 251 total,   1 running, 247 sleeping,   3 stopped,   0 zombie
Cpu(s):  0.5%us,  0.8%sy,  0.4%ni, 98.1%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:     23591M total,    23181M used,      409M free,      861M buffers
Swap:    12288M total,     1026M used,    11262M free,    16459M cached

  PID USER      PR  NI  VIRT  RES  SHR S   %CPU %MEM    TIME+  COMMAND
39494 i2kuser   20   0 15.5g 2.7g  12m S      6 11.8   1245:06 java
37462 i2kuser   20   0 1906m 753m  11m S      3  3.2 558:53.85 java
20073 root      17  -3  423m 154m  16m S      2  0.7 480:39.09 pmu.bin
 1459 root      39  19 12528 2036  592 S      1  0.0   6:06.54 get_os_statisti
  855 root      39  19     0    0    0 S      0  0.0  65:07.89 kipmi0
21846 root      20   0  9072 1288  856 R      0  0.0   0:00.17 top
32669 oracle    20   0 11.8g  27m  24m S      0  0.1   3:47.58 oracle
32679 oracle    20   0 11.7g  62m  60m S      0  0.3  16:04.39 oracle
    1 root      20   0 10560  872  736 S      0  0.0   0:11.27 init
    2 root      20   0     0    0    0 S      0  0.0   0:00.18 kthreadd

查看CPU那一行,Cpu(s): 0.5%us, 0.8%sy, 0.4%ni, 98.1%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st

Google上解释为:

us: is meaning of "user CPU time"
sy: is meaning of "system CPU time"
ni: is meaning of" nice CPU time"
id: is meaning of "idle"
wa: is meaning of "iowait"
hi:is meaning of "hardware irq" (servicing hardware interrupts)
si : is meaning of "software irq" (servicing software interrupts)
st : is meaning of "steal time" (time in involuntary wait by virtual cpu while hypervisor is servicing another processor)

  中文解释为:

%us用户空间占用cpu百分比;
%sy内核空间占用cpu百分比;
%ni用户进程空间内改变过优先级的进程占用cpu百分比;
%id空闲cpu百分比,反映一个系统cpu的闲忙程度。越大越空闲;
%wa等待输入输出(I/O)的cpu百分比;
%hi指的是cpu处理硬件中断的时间;
%si值的是cpu处理软件中断的时间;
%st当 hypervisor 服务另一个虚拟处理器的时候,虚拟 CPU 等待实际 CPU 的时间的百分比

  CPU使用率可以直接从TOP命令得出

在Linux的内核中,有一个全局变量:Jiffies。 Jiffies代表时间。它的单位随硬件平台的不同而不同。系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目。这样jiffies的单位就是 1/HZ。Intel平台jiffies的单位是1/100秒,这就是系统所能分辨的最小时间间隔了。每个CPU时间片,Jiffies都要加1。 CPU的利用率就是用执行用户态+系统态的Jiffies除以总的Jifffies来表示。

在Linux系统中,CPU利用率的计算来源在/proc/stat文件,这个文件的头几行记录了每个CPU的用户态,系统态,空闲态等状态下的不同的Jiffies,常用的监控软件就是利用/proc/stat里面的这些数据来计算CPU的利用率的。

包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

i2000:~ # cat /proc/stat
cpu  11772990 3685567 11586702 994389437 1502196 0 617801 0 0 0
cpu0 1925911 145536 1479330 123377541 944584 0 71441 0 0 0
cpu1 1493902 723778 1332508 123809933 398061 0 186171 0 0 0
cpu2 1218152 138174 1327108 125164685 28448 0 67759 0 0 0
cpu3 1408917 788649 1408734 124241479 31922 0 64644 0 0 0
cpu4 1347669 144848 1477635 124881583 38168 0 54423 0 0 0
cpu5 1318674 827204 1696224 124014206 24080 0 63939 0 0 0
cpu6 2189237 147904 1743240 123789739 16803 0 57403 0 0 0
cpu7 870526 769470 1121920 125110268 20126 0 52016 0 0 0
intr 6041226474 39 9 0 2 31344 0 2 0 356 0 0 29 130 0 879833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 110214 0 94382684 987 0 83207017 751 0 120017596 99 0 23038227 0 1319554 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 11176275226
btime 1440513807
processes 83672461
procs_running 1
procs_blocked 0
softirq 5289823244 0 2558726670 741 402209688 239962 0 3821129 628773714 0 1696051340

  参数 解释
user (432661) 从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
nice (13295) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies) 
system (86656) 从系统启动开始累计到当前时刻,核心时间(单位:jiffies) 
idle (422145968) 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies) 
iowait (171474) 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,
irq (233) 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies) 
softirq (5346) 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)

CPU时间=user+system+nice+idle+iowait+irq+softirq

“intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
“ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒。
“processes (total_forks) 自系统启动以来所创建的任务的个数目。
“procs_running”:当前运行队列的任务的数目。
“procs_blocked”:当前被阻塞的任务的数目。

那么CPU利用率的计算方法:可以使用取两个采样点,计算其差值的办法。

(idle2-idle1)/cpu2-cpu1

shell脚本如下:

#!/bin/bash

CPU_1=$(sed -n ‘1p‘ /proc/stat | awk ‘{print $2" "$3" "$4" "$5" "$6" "$7" "$8}‘)
IDE_1=$(echo $CPU_1 | awk ‘{print $4}‘)
Total_1=$(echo $CPU_1 | awk ‘{print $1+$2+$3+$4+$5+$6+$7}‘)

echo "########################################"
echo "sleep 5 sec begin....."
sleep 5
echo "sleep 5 sec end......."

CPU_2=$(sed -n ‘1p‘ /proc/stat | awk ‘{print $2" "$3" "$4" "$5" "$6" "$7" "$8}‘)
IDE_2=$(echo $CPU_2 | awk ‘{print $4}‘)
Total_2=$(echo $CPU_2 | awk ‘{print $1+$2+$3+$4+$5+$6+$7}‘)

IDE=`expr $IDE_2 - $IDE_1`
Total=`expr $Total_2 - $Total_1`

tem_rate=`expr 1-$IDE/$Total | bc -l`
rate=`expr $tem_rate*100 | bc -l`
display_rate=`expr "scale=3; $rate/1" |bc`

#display
echo "The CPU useage rate is : $display_rate%"
echo " "
echo "Now use TOP command to caculate."
rate_top=$(top -n 1 | grep "Cpu" | awk ‘{print $5}‘ | cut -d "%" -f 1)
display_rate_top=`expr 100.000-$rate_top|bc -l`
echo "The CPU useage rate is : $display_rate_top%"
echo "########################################"
exit 0

  

时间: 2024-10-05 07:33:42

Linux下CPU使用率详解的相关文章

Linux下硬盘使用率详解及shell脚本实现

linux下使用df -TPh查看硬盘使用率: sdua:/ # df -TPh Filesystem Type Size Used Avail Use% Mounted on /dev/vda3 ext3 2.0G 974M 940M 51% / udev tmpfs 16G 500K 16G 1% /dev tmpfs tmpfs 32G 9.4G 23G 30% /dev/shm /dev/vda2 ext3 1008M 56M 902M 6% /boot /dev/vda9 ext3 2

(转)Linux下PS命令详解

(转)Linux下PS命令详解 整理自:http://blog.chinaunix.net/space.php?uid=20564848&do=blog&id=74654 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续: (2) top:如果想对进程运行时间监控,应该用 top 命令: (3) kill 用于杀死进程或者给进程发送信号: (4) 查看文章最后的man手册,可以查看ps的每项输出的含义

Linux下ps命令详解 Linux下ps命令的详细使用方法

Linux下ps命令详解 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)ps工具标识进程的5种状态码:D 不可中断 uninterruptible sleep (usuall

Linux下可执行文件格式详解

Linux下面,目标文件.共享对象文件.可执行文件都是使用ELF文件格式来存储的.程序经过编译之后会输出目标文件,然后经过链接可以产生可执行文件或者共享对象文件.Linux下面使用的ELF文件和Windows操作系统使用的PE文件都是从Unix系统的COFF文件格式演化来的. 我们先来了解一些基本的想法. 首先,最重要的思路是一个程序从人能读懂的格式转换为供操作系统执行的二进制格式之后,代码和数据是分开存放的,之所以这样设计有这么几个原因: 1.程序执行之后,代码和数据可以被映射到不同属性的虚拟

linux下任务计划详解

一次性任务计划 用at(指定时间执行任务,需开启atd服务)   batch(不指定执行时间,在系统空闲时/系统负载较低时自动执行任务)等命令来实现 周期性任务计划 cron(需启动crond服务) at介绍 at now+3min|11:30|noon,midnight,teatime(更多时间指定格式见man at页)  回车  在>提示符下可输入多行命令,用ctrl+d提交任务 atq 查看当前等待执行的atd的命令队列,或  at  -l at会将执行结果(即执行输出)以邮件方式发给任务

Linux下chkconfig命令详解

Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset] chkconfig在没有参数运行时,显示用法.如果加上服务名,那么就检查这个服务是否在当前运行级启动.如果是,返

转载的 Linux下chkconfig命令详解

Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法: chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset] chkconfig 在没有参数运行时,显示用法.如果加上服务名,那么就检查这个服务是否在当前运行级启动.如果是

linux下scp命令详解

scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.linux的scp命令可以在linux服务器之间复制文件和目录. scp命令的用处: scp在网络上不同的主机之间复制文件,它使用ssh安全协议传输数据,具有和ssh一样的验证机制,从而安全的远程拷贝文件. scp命令基本格式: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o s

&lt;linux下sysctl指令详解&gt;

Sysctl指令是对系统核心参数的设置: 用法: -a 参数列出系统中所有核心设置 当然了这些核心的设置都是文件,存放于/proc/sys/net目录下. 举个有代表性的例子: net.ipv4.icmp_echo_ignore_all = 0      把所有的点改为 / 就可以了.   [[email protected] net]# net.ipv4.icmp_echo_ignore_all = 0 [[email protected] net]# cd ipv4/ [[email pro