浅谈Linux中的CPU负载、磁盘I/O性能、内存

CPU负载

平均负载

  • Linux操作系统能够同时处理几个不同名称的任务。但是同时运行多个任务的过程中,cpu和磁盘这些有限的硬件资源就需要被这些任务程序共享。即便很短的时间间隔内,需要一边在这些任务之间进行切换到一边进行处理,这就是多任务。
  • 运行中的任务较少的情况下,系统并不是等待此类切换动作的发生。但是当任务增加时,例如任务A正在CPU上执行计算,接下来如果任务B和C也想进行计算,那么就需要等待CPU空闲。也就是说,即便是运行处理某任务,也要等到轮到他时才能运行,此类等待状态就表现为程序运行延迟。
  • uptime输出中包含“load average”的数字,Load average从左边起依次是过去1分钟、5分钟、15分钟内,单位时间的等待任务数,也就是表示平均有多少任务正处于等待状态。我们常常比较关注过去1分钟cpu的平均负载,因为这最接近cpu的当前状况。在load average较高的情况下,这就说明等待运行的任务较多,因此轮到该任务运行的等待时间就会出现较大的延迟,即反映了此时负载较高。
  • 对于load average的临界值,业内有两种判断依据:
    load average <= cpu核数 * 0.7 或 load average <= cpu核数 - 1

Linux命令查看系统平均负载load-average的输出:

cpu负载的计算

CPU数量和CPU内核数都会影响到CPU负载,因为任务最终是要分配到CPU核心去处理的。两块CPU要比一块CPU好,双核要比单核好。因此,除去CPU性能上的差异,CPU负载是基于内核数来计算的。“有多少内核,就有多少load”。如单核负载为1.00,双核负载为2.00.以此类推。

cpu负载分类

  • 负载就是cpu在一段时间内正在处理以及等待cpu处理的进程数之和的统计信息,也就是cpu使用队列的长度统计信息,这个数字越小越好(如果超过CPU核心*0.7就是不正常
  • 负载分为两大部分:CPU负载、IO负载
    • cpu负载:假设有一个进行大规模科学计算的程序,虽然该程序不会频繁地从磁盘输入输出,但是处理完成需要相当长的时间。因为该程序主要被用来做计算、逻辑判断等处理,所以程序的处理速度主要依赖于cpu的计算速度。此类cpu负载的程序称为“计算密集型程序”。
    • IO负载:还有一类程序,主要从磁盘保存的大量数据中搜索找出任意文件。这个搜索程序的处理速度并不依赖于cpu,而是依赖于磁盘的读取速度,也就是输入输出(input/output,I/O).磁盘越快,检索花费的时间就越短。此类I/O负载的程序,称为“I/O密集型程序”。

磁盘I/O性能

指标

  • 指标 1:每秒 I/O 数(IOPS 或 tps)
    对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和。当传输小块不连续数据时,该指标有重要参考意义。
  • 指标 2:吞吐量(Throughput)
    指硬盘传输数据流的速度,传输数据为读出数据和写入数据的和。其单位一般为 Kbps, MB/s 等。当传输大块不连续数据的数据,该指标有重要参考作用。
  • 指标 3:平均 I/O 数据尺寸 平均 I/O
    数据尺寸为吞吐量除以 I/O 数目,该指标对揭示磁盘使用模式有重要意义。一般来说,如果平均 I/O 数据尺寸小于 32K,可认为磁盘使用模式以随机存取为主;如果平均每次 I/O 数据尺寸大于 32K,可认为磁盘使用模式以顺序存取为主。
  • 指标 4:磁盘活动时间百分比(Utilization)
    磁盘处于活动时间的百分比,即磁盘利用率,磁盘在数据传输和处理命令(如寻道)处于活动状态。磁盘利用率与资源争用程度成正比,与性能成反比。也就是说磁盘利用率越高,资源争用就越严重,性能也就越差,响应时间就越长。一般来说,如果磁盘利用率超过 70%,应用进程将花费较长的时间等待 I/O完成,因为绝大多数进程在等待过程中将被阻塞或休眠。
  • 指标 5:服务时间(Service Time)
    指磁盘读或写操作执行的时间,包括寻道,旋转时延,和数据传输等时间。其大小一般和磁盘性能有关,CPU/ 内存的负荷也会对其有影响,请求过多也会间接导致服务时间的增加。如果该值持续超过 20ms,一般可考虑会对上层应用产生影响。
  • 指标 6:I/O 等待队列长度(Queue Length)
    指待处理的 I/O 请求的数目,如果 I/O 请求压力持续超出磁盘处理能力,该值将增加。如果单块磁盘的队列长度持续超过 2,一般认为该磁盘存在I/O性能问题。需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的I/O 等待队列长度。
  • 指标 7:等待时间(Wait Time)
    指磁盘读或写操作等待执行的时间,即在队列中排队的时间。如果 I/O 请求持续超出磁盘处理能力,意味着来不及处理的 I/O 请求不得不在队列中等待较长时间。

磁盘 I/O性能优化

  1. 调整数据布局,尽量将 I/O 请求较合理的分配到所有物理磁盘中。
  2. 对于 RAID 磁盘阵列,尽量使应用程序 I/O 等于条带尺寸或者为条带尺寸的倍数。并选取合适的 RAID 方式,如 RAID10,RAID5。
  3. 增大磁盘驱动程序的队列深度,但不要超过磁盘的处理能力,否则,部分 I/O 请求会因为丢失而重新发出,这将降低性能。
  4. 应用缓存技术减少应用存取磁盘的次数,缓存技术可应用在文件系统级别或者应用程序级别。
  5. 由于多数数据库中已包括经优化后的缓存技术,数据库 I/O 宜直接存取原始磁盘分区(raw partition)或者利用绕过文件系统缓存的 DIO 技术(direct IO)。
  6. 利用内存读写带宽远比直接磁盘 I/O 操作性能优越的特点,将频繁访问的文件或数据置于内存中。

内存

常用的计算方法

  • 物理已用内存 = 实际已用内存 - 缓冲 - 缓存
  • 物理空闲内存 = 总物理内存(total) - 实际已用内存(used) + 缓冲(buffers) + 缓存(cached)
  • 应用程序可用空闲内存 = 总物理内存 - 实际已用内存
  • 应用程序已用内存 = 实际已用内存 - 缓冲 - 缓存
    在这里插入图片描述
  • Mem 内存的使用信息
  • Swap 交换空间的使用信息
  • total 系统总的可用物理内存大小
  • used 已被使用的物理内存大小
  • free 还有多少物理内存可用
  • shared 被共享使用的物理内存大小
  • buff/cache 被 buffer 和 cache 使用的物理内存大小
  • available 还可以被应用程序使用的物理内存大小

free 与 available 的区别:

  • free 是真正尚未被使用的物理内存数量
  • available 是应用程序认为可用内存数量available = free + buffer + cache (注:只是大概的计算方法)
  • Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值