计算机资源——空间与时间关系(一)
计算机由cpu、内存、硬盘三个重要硬件构成,cpu是计算资源,属于时间资源,内存和外部存储(硬盘等)属于空间资源。在计算机中,我们知道速度最快的是cpu,cpu由控制单元、运算单元、时钟组成。cpu寄存器阵列实际上相当于处理器内部存储器,寄存器容量非常小,仅用于临时存储计算数据所用,它的存储速度最快。
我们大家知道,cpu速度相对磁盘来说,相差非常大,因此cpu是不能直接从硬盘读取数据的,必须先把数据从磁盘读取到内存之后,cpu才能对内存中的数据进行操作,内存的速度比磁盘快很多,但是要比cpu慢。我们可以看见,速度从慢到快的顺序来排列为:磁盘-内存-cpu。
从目前的情况来看,每隔一段时间,cpu的运算速度便会大幅度提升,但是内存和磁盘(特别是磁盘)的速度一直没有多大提升。因此在我们的系统中,经常发现的系统瓶颈出现在磁盘上。如果磁盘、内存速度和cpu速度一样快,那么我们工作中很多问题就很简单了,但是事实却是相反,因此我们有必要深入了解时间与空间的关系,在这个基础上进行架构设计、软件设计以及维护,能够起到事半功倍的效果。
我们来看一个例子,具体情况如下:
我们发现一台数据库服务器平时服务正常,但是在某些时间点上出现磁盘I/O大,cpu消耗高,内存正常的现象,我们需要分析该情况是如何产生的,
top - 17:15:17 up 42 days, 15:35,  1 user,  load average: 0.05, 0.12, 0.09
Tasks:  72 total,   1 running,  71 sleeping,   0 stopped,   0 zombie
Cpu(s):  80%us,  1.3%sy,  0.0%ni, 95.3%id,  80%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   3370252k total,  1945540k used,  1424712k free,   184296k buffers
Swap:  4000144k total,       44k used,  4000100k free,  1399408k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3882 mysql     15   0  706m 264m 4836 S   99  8.0   5002:10 mysqld
    1 root      16   0  1948  664  564 S    0  0.0   0:01.84 init
    2 root      RT   0     0    0    0 S    0  0.0   0:00.14 migration/0
    3 root      34  19     0    0    0 S    0  0.0   0:00.02 ksoftirqd/0
    4 root      RT   0     0    0    0 S    0  0.0   0:00.05 migration/1      
我们从该服务器上看到的情况如上,我们会立刻联想,磁盘I/O大,那一定是有数据写入或者进行数据备份。但是检查数据备份之后,我们排除了数据备份的可能性。那么一定是有数据写入,我们通过iostat来查看数据写入情况,却发现
evice:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               1.88         4.83        29.50   17818614  108735184
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.50    1.74    0.00   97.77
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda              22.55        15.69       313.73         16        320
很奇怪,磁盘的写入数据非常的少,通过这点证明,我们先前的判断是有问题的。那到底是什么样的操作引起的呢?
我们来分析一下,如果是数据写入磁盘,只是将写入指令发送到磁盘,cpu使用率决不会这样高,那么是什么操作引起这么高的cpu使用率呢?一般在数据库使用中,大数据量的排序会消耗较多的cpu时间,数据库的排序buffer又分配过小,造成数据库的外排序,同时消耗cpu时间和I/O请求。通过对业务的了解,我们找到了这一现象的根源,可见,在处理实际问题中,我们需要综合考虑cpu,磁盘I/O,内存的关系,然后才能得出正确结论。
 
      
最近评论