%iowait和CPU使用率的正确认知

resources

man (on RHEL 7)

# man mpstat
%usr
       Show the percentage of CPU utilization that occurred while executing at the user level (application).
%nice
       Show the percentage of CPU utilization that occurred while executing at the user level with nice priority.
%sys
       Show the percentage of CPU utilization that occurred while executing at the system level (kernel).Note that this does not include time spent servicing hardware and software interrupts.
%iowait
       Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
%irq
       Show the percentage of time spent by the CPU or CPUs to service hardware interrupts.
%soft
       Show the percentage of time spent by the CPU or CPUs to service software interrupts.
%steal
       Show the percentage of time spent in involuntary wait by the virtual CPU or CPUs while the hypervisor was servicing another virtual  processor.
%guest
       Show the percentage of time spent by the CPU or CPUs to run a virtual processor.
%gnice
       Show the percentage of time spent by the CPU or CPUs to run a niced guest.
%idle
       Show the percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request.

# man top
us, user : time running un-niced user processes
sy, system : time running kernel processes
ni, nice : time running niced user processes
id, idle : time spent in the kernel idle handler
wa, IO-wait : time waiting for I/O completion
hi : time spent servicing hardware interrupts
si : time spent servicing software interrupts
st : time stolen from this vm by the hypervisor

TIPS

  • CPU Usage Time and Percentage
参考 mpstat 手册,%usr + %nice + %sys + %iwoait + %irq + %soft + %steal + %guest + %gnice + %idle = 100%

%steal一般是在虚拟机中才能看到数值,比如CPU overcommitment很严重的VPS,而%guest和%nice一般都很低,所以也可以根据/proc/stat或者top可得,user + nice + system + idle + iowait + irq + softirq + steal = 100

To calculate Linux CPU usage time subtract the idle CPU time from the total CPU time as follows:
Total CPU time since boot       = user + nice + system + idle + iowait + irq + softirq + steal
Total CPU Idle time since boot  = idle + iowait
Total CPU usage time since boot = (Total CPU time since boot) - (Total CPU Idle time since boot)
Total CPU percentage            = (Total CPU usage time since boot)/(Total CPU time since boot X 100)
  • Linux进程状态
运行状态(TASK_RUNNING):  是运行态和就绪态的合并,表示进程正在运行或准备运行,Linux 中使用TASK_RUNNING 宏表示此状态
可中断睡眠状态(浅度睡眠)(TASK_INTERRUPTIBLE):  进程正在睡眠(被阻塞),等待资源到来是唤醒,也可以通过其他进程信号或时钟中断唤醒,进入运行队列。Linux 使用TASK_INTERRUPTIBLE 宏表示此状态。
不可中断睡眠状态(深度睡眠状态)(TASK_UNINTERRUPTIBLE):  其和浅度睡眠基本类似,但有一点就是不可被其他进程信号或时钟中断唤醒。Linux 使用TASK_UNINTERRUPTIBLE 宏表示此状态。
暂停状态(TASK_STOPPED):  进程暂停执行接受某种处理。如正在接受调试的进程处于这种状态,Linux 使用TASK_STOPPED 宏表示此状态。
僵死状态(TASK_ZOMBIE):  进程已经结束但未释放PCB,Linux 使用TASK_ZOMBIE 宏表示此状态
  • %iowait 的正确认知
%iowait 表示在一个采样周期内有百分之几的时间属于以下情况:CPU空闲、并且有仍未完成的I/O请求。
对 %iowait 常见的误解有两个:  一是误以为 %iowait 表示CPU不能工作的时间,  二是误以为 %iowait 表示I/O有瓶颈。

首先 %iowait 升高并不能证明等待I/O的进程数量增多了,也不能证明等待I/O的总时间增加了。  例如,在CPU繁忙期间发生的I/O,无论IO是多还是少,%iowait都不会变;当CPU繁忙程度下降时,有一部分IO落入CPU空闲时间段内,导致%iowait升高。  再比如,IO的并发度低,%iowait就高;IO的并发度高,%iowait可能就比较低。
可见%iowait是一个非常模糊的指标,如果看到 %iowait 升高,还需检查I/O量有没有明显增加,avserv/avwait/avque等指标有没有明显增大,应用有没有感觉变慢,如果都没有,就没什么好担心的。
  • 查看CPU使用率,推荐如下Linux命令:
# top
# sar -u 1 5
# vmstat -n 1 5
# mpstat -P ALL 1 5
  • 查看Load的值,推荐如下Linux命令:
# top
# uptime
# sar -q 1 5
时间: 2024-10-24 12:44:03

%iowait和CPU使用率的正确认知的相关文章

查看线程linux cpu使用率

Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算 转 http://www.cnblogs.com/lidabo/p/4738113.html目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps 命令 top命令 单核情况下Cpu使用率的计算 基本思想 总的Cpu使用率计算 计算方法 某一进程Cpu使用率的计算 计算方法 实验数据

Linux性能优化从入门到实战:04 CPU篇:CPU使用率

??CPU使用率是单位时间内CPU使用情况的统计,以百分比方式展示. $ top top - 11:46:45 up 7 days, 11:52, 1 user, load average: 0.00, 0.01, 0.00 Tasks: 198 total, 1 running, 197 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st K

用python查看树莓的CPU使用率

http://www.blogjava.net/fjzag/articles/317773.html http://blog.csdn.net/a6225301/article/details/47092707 http://www.iplaypy.com/code/linux/l2546.html ------------------------------------------参考上面网址 感觉使用python就像是在复习liunx操作系统知识一样.python像是一头大蟒蛇控制着一切~p

获取CPU使用率脚本

#!/bin/bash #gino #20150711 CPULOG_1=`cat /proc/stat | head -n1 | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'` SYS_IDLE_1=`echo $CPULOG_1 | awk '{print $4}'` Total_1=`echo $CPULOG_1 | awk '{pr

android之cpu使用率曲线效果的实现!

最近做一个效果:在手机设置里面"关于手机"里面添加一项来显示当前手机cpu使用率的曲线!其实现效果如下图所示: 上图关于手机的第一项就是我要实现的效果!今天来讲讲这个曲线的view(cpu_speedcurve_view)是如何实现的! 首先要注意以下几点: (1)由于我设计的cpu_speedcurve_view不仅仅显示动态的曲线,还需要用textview显示一些cpu相关信息!所以,我选择cpu_speedcurve_view继承一个viewgroup,这里我选择的是FrameL

服务器CPU使用率过高排查与解决思路

发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况# mpstat -P ALL 2 1Linux 2.6.32-358.el6.x86_64 (linux—host) 01/05/2016 _x86_64_ (24 CPU) 04:41:13 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle04:41:15 PM all 0.56 0.00 0.25 0.00 0.00 0.04

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

Android获取cpu使用率,剩余内存和硬盘容量

1.内存信息 在proc/meminfo下有详细的内存使用情况,我这里获取的内存信息就是从这个文件里获取的.获取到详细的内存信息后根据我自己的需求,从bufferdreader中单独抽取出来了剩余的内存容量. <span style="font-family:Microsoft YaHei;font-size:14px;"> Runtime runtime = Runtime.getRuntime(); Process p; try { p = runtime.exec(C

Linux c 获取cpu使用率(2)

上一篇博文当中,我们谈论了在Linux中如何获取执行命令行的结果,最终得到cpu的 使用率,但是十分不幸的事情是: 1)通过top -n 1 | grep Cpu获取的cpu使用率不会刷新,每次读取结果只能够得到第一次执行的结果. 2)可能导致SIGNAL上的冲突 新的代码的解决原理: 通过读取/proc/stat中的数据计算得出cpu的使用率 #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #i