解读CPU
在Linux系统中监控CPU的性能主要关注3个指标:运行队列、CPU使用率和上下
文切换,理解这3个指标的概念和原理对于发现和处理CPU性能问题有很大的帮助。
1. 运行队列
每个CPU都会维护一个运行队列,调度器会不断地轮询让队列中的进程运行,直到进程运行完毕将其由队列中删除。如果CPU过载,就会出现调度器跟不上系统要求,导致运行队列中等待运行的进程越来越多。正常来说,每个CPU的运行队列不要超过3,如果是双核CPU就不要超过6。
2. CPU使用率
CPU使用率一般可以分为一下几个部分。
a. 用户进程:运行用户进程所占用的CPU时间的百分比。
b. 系统进程:运行系统进程和中断所占用的CPU的时间百分比。
c. 等待IO:因为IO等待而使CPU处于idle状态的时间百分比。
d. 空闲:CPU处于空闲状态的时间百分比。
如果CPU的空闲率长期低于10%,那么表示CPU的资源已经非常紧张,应该考虑进程优化或添加更多地CPU。“等待IO”表示CPU因等待IO资源而被迫处于空闲状态,这时候的CPU并没有处于运算状态,而是被白白浪费了,所以“等待IO应该越小越好。”
3. 上下文切换
通过CPU时间轮询的方法,Linux能够支持多任务同时运行。对于普通的CPU,内核会调度和执行这些进程,每个进程都会被分配CPU时间片并运行。当一个进程用完时间片或者被更高优先级的进程抢占时间块后,它会被转到CPU的等待运行队列中,同时让其他进程在CPU上运行。这个进程切换的过程被称为上下文切换。过多的山下文切换会造成系统的很大的开销。
实例解读:
CPU状态的监控指标主要有以下几个参数获得:
r:在运行队列中等待的进程数。
b:在等待IO的进程数。
cs:每秒的上下文切换的次数。
us:用户进程使用的CPU时间(%)。
sy:系统进程使用的CPU时间(%)。
id:CPU空闲时间(%)。
wa:等待IO所消耗的CPU时间(%)。
由上面的命令输出中可以看到:
1. IO等待的CPU时间(wa)非常高,而实际运行用户和系统进程的CPU时间却不高。
2. 存在等待IO的进程(b>0)。
由此可以得出结论:系统目前CPU使用率高是由于IO等待所造成的,并非由于CPU资源不足。用户应检查系统中正在进行IO操作的进程,并进行调整和优化。
正常的CPU状态图,可以与上图作比较:
查看内存使用情况,可以使用命令 free -m
其结果大致如下:
total used free shared buffers cached
Mem: 32108 30681 1426 0 123 21165
-/+ buffers/cache: 9392 22715
Swap: 34287 1262 33025
在第一部分Mem 行中有如下参数:
* total: 内存总数,即32108 MB
* used: 已经使用的内存数,即 30681 MB
* free: 空闲的内存数:即 1426MB
* shared:当前已废弃不用,总是 0
* buffers Buffer: 缓存内存数,即 123 MB
* cached Page: 缓存内存数,即 421MB
其中,内存总数与已经使用内存数和空闲内存数的关系是:
total (32108) = used (30681) + free (1426)
在第二部分内容(-/+ buffers/cache)中个参数如下所示:
(-buffers/cache): 真正使用的内存数,即9392M,他指的是第一部分的 used - buffers - cached
(+buffers/cache): 可用的内存数,即22715M,他指的是第一部分的 free + buffers + cached
其含义可以理解为:-buffers/cached 反映的是被程序实实在在用掉的内存,而 +buffers/cached反映的是可以被使用(或者说挪用)的内存总数。
第三部分指交换分区。(书上说“大家都明白,这里就不再讲了”,可是我还不清楚,一会儿再查吧)
对操作系统来讲,used 和 free都是Mem的参数,所以 buffers/cached这两项对于操作系统来讲都是已经被使用的内存,所以呢 free的就比较少;
而对于应用程序来说呢,buffers/cached等同于可用的内存,因为buffers/cached可提高程序执行的性能,当程序使用内存时,buffers/cached很快就会被使用。
所以从应用程序的角度来看,应以(-/+ buffers/cached)的free 和 used为主,即我们主要与他相关的free和used就可以了。
我们在观察Linux的内存使用情况时,只要没发现用swap的交换空间,就不必担心自己的内存太少。
如果常常看到swap用了很多,那么你就要考虑加物理内存了。这也是在Linux服务器上看内存是否够用的标准。
Swap交换分区概念
Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。
您还未添加分享代码,请到主题选项中,添加百度分享代码!
您可以选择一种方式赞助本站
支付宝转账赞助
支付宝扫一扫赞助
微信钱包扫描赞助