计算机资源——空间与时间关系(一)

计算机由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,内存的关系,然后才能得出正确结论。

技术相关:

评论

对于这种情况,除了对应用了解之外,
也可以通过processlist信息查到一些端倪 :)