cpu 资源的过度使用,会造成系统中出现大量的等待进程,导致应用程序相应时间缓慢,而进程的大量增加又会导致系统内存资源的增加,
当物理内存耗尽时,系统会使用虚拟内存,而虚拟内存的使用又会造成磁盘io的增加并加大cpu的开销。
使用vmstat 查看系统维度的cpu负载
vmstat
[root@b8 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 4 12320784 185196 1460 605296 4 2 17 159 0 0 10 2 86 2 0
procs
r:表示系统中cpu 等待处理的线程。由于cpu 每次只能处理一个线程,所以,该数值越大,通常表示系统运行越慢。
b:表示阻塞的进程,比如正在等待io或者内存交换等
memory(KB单位)
swpd:虚拟内存已使用的大小,如果大于0,表示机器的物理内存不足了,如果不是程序内存泄漏的原因,那么该升级内存或者把耗内存的任务进程迁移到其他机器。
free:表示当前空闲的物理内存数量
buff:表示buffers cache 的内存数量,一般对块设备的读写才需要缓冲
cache:表示page cached的内存数量,一般作为文件系统进行缓存,频繁访问的文件都会被缓存。如果cache值较大,说明缓存文件较多,如果此时io中的bi比较小,说明文件系统效率比较好。
swap
si:每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露,要查找耗内存进程的解决掉
so:每秒虚拟内存写入磁盘的大小,如果这个值大于0,表示物理内存不够用或者泄露,要查找耗内存进程解决掉。
io
bi:块设备每秒接受的块数量(读磁盘)
bo:块设备每秒发送的块数量(写磁盘)
bi+bo 的参考值为1000,如果超过1000,而且wa值较大,则表示系统磁盘io有问题,应该考虑提高磁盘的读写性能。
system
in:表示在某一时间间隔内观测到的每秒设备中断数
cs:每秒上下文切换。这个值越小越好
这两个值越大,由内核消耗的cpu时间越多。
cpu 显示cpu 的使用状态
us: 用户模式消耗的cpu时间百分比。该值较高事i,说明用户进程消耗的cpu时间比较多,比如:如果该值长期超过50%,则需要对进程算法或代码等进行优化。
sy:内核模式消耗的cpu时间百分比。如果太高,表示系统调用时间长。
id:处于空闲状态的cpu时间百分比。如果该值持续为0,同时sy是us的2倍,则通常说明系统则面临着cpu 资源的短缺。
wa:IO等待消耗的cpu时间百分比。该值较高时,说明IO等待比较严重,这可能磁盘大量做随机访问造成的,也可能是磁盘性能出现了瓶颈
top 直接终止消耗较大的进程
top 按k + pid 号 回车
缓存机制
在linux 系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,
当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。
1、缓存机制优点:减少系统调用次数,降低cpu上下文切换和磁盘访问频率。
2、cpu上下文切换:cpu给每一给进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务
这个过程叫做上下文切换。实质上就是被终止运行进程与运行进程的进程切换。
swap 用途
swap 意思是交换分区,通常我们说是虚拟内存,是从硬盘中划分出一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不同的程序
然后将这些程序临时放到swap中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到swap
buffer 和cache 区别
cache 缓存: 是把读取过的数据保存起来,重新读取时若命中就不要去读磁盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
buffer 缓冲: 是根据磁盘读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
mysql 服务器IO 高
1、磁盘子系统设备性能差,或采用ext2/ext3之类文件系统,或采用cfq之类的io scheduler,所以IOPS提上不去;
2、SQL效率不高,比如没有索引,或者一次性读取大量数据,所以需要更多的I/O;
3、可用内存太小,内存中能缓存/缓冲的数据不多,所以需要更多的I/O。