1.什么是负载 ?


负载(load) 是 linux 机器的一个重要指标,直观了反应了机器当前的状态。如果机器负载过高,那么对机器的操作将难以进行。


Linux 的负载高,主要是由于 CPU 使用、内存使用、 IO 消耗三部分构成。任意一项使用过多,都将导致服务器负载的急剧攀升。


2.查看服务器负载 的 命令


A) $ uptime


 12:20:30 up 44 days, 21:46,  2 users,  load average: 8.99, 7.55, 5.40


B) $ w


 12:22:02 up 44 days, 21:48,  2 users,  load average: 3.96, 6.28, 5.16


load average 分别对应于过去 1 分钟, 5 分钟, 15 分钟的负载平均值。


w 命令还提供了当前登录用户,以及正在执行的操作等信息。


这两个命令只是单纯的反映出负载,linux 提供了更为强大,也更为实用的 top 命令来查看服务器负载。


这两个命令只是单纯的反映出负载,linux提供了更为强大,也更为实用的top命令来查看服务器负载。


 


C)$ top


top命令不仅可以查看当前系统的平均负载,还可以查看不同进程对于CPU、内存等资源的使用情况。



1) Tasks 行展示了目前的进程总数及所处状态,要注意 zombie ,表示僵尸进程,不为 0 则表示有进程出现问题。


2) Cpu(s) 行展示了当前 CPU 的状态,


us 表示用户进程占用 CPU 比例,


sy 表示内核进程占用 CPU 比例,


id 表示空闲 CPU 百分比, 如果系统缓慢而这个值很高,说明系统慢的原因不是CPU 负载高;


wa 表示 IO 等待所占用的 CPU 时间的百分比。 wa 占用超过 30% 则表示 IO 压力很大 。


hi : CPU 处理硬件终端所占时间的比率;


si : CPU 处理软件终端所占时间的比率;


st :流逝的时间,虚拟机中的其他任务所占 CPU 时间的比率;


用户进程占比高,wa 低,说明系统缓慢的原因在于进程占用大量 CPU ,通常还会伴有教低的 id ,说明 CPU 空转时间很少;


wa 低, id 高,可以排除 CPU 资源瓶颈的可能。 


wa 高,说明 I/O 占用了大量的 CPU 时间,需要检查交换空间的使用,交换空间位于磁盘上,性能远低于内存,当内存耗尽开始使用交换空间时,将 会给性能带来严重影响,所以对于性能要求较高的服务器,一般建议关闭交换空间。另一方面,如果内存充足,但 wa 很高,说明需要检查哪个进程占用了大量的  I/O 资源。


3) Mem 行展示了当前内存的状态, total 是总的内存大小, userd 是已使用的, free 是剩余的, buffers 是目录缓存。


4) Swap 行同 Mem 行, cached 表示缓存,用户已打开的文件。 如果Swap 的 used 很高,则表示系统内存不足 。


3. 在top命令下,按1,则可以展示出服务器有多少CPU,及每个CPU的使用情况



一般而言,服务器的合理负载是CPU 核数 *2 。也就是说对于 8 核的 CPU ,负载在 16 以内表明机器运行很稳定流畅。如果负载超过 16 了,就说明服务器的运行有一定的压力了。


在top 命令下,按 shift + "c" ,则将进程按照 CPU 使用率从大到小排序,按 shift+"p" ,则将进程按照内存使用率从大到小排序,很容易能够定位出哪些服务占用了较高的 CPU 和内存。


仅仅有top 命令是不够的,因为它仅能展示 CPU 和内存的使用情况,对于负载升高的另一重要原因 ——IO 没有清晰明确的展示。 linux 提供了 iostat 命令,可以了解 io 的开销。


D) iostat -x 1 10 命令


输入iostat -x 1 10 命令,表示开始监控输入输出状态, -x 表示显示所有参数信息, 1 表示每隔 1 秒监控一次, 10 表示共监控 10 次。



其中rsec/s 表示读入, wsec/s 表示每秒写入,这两个参数某一个特别高的时候就表示磁盘 IO 有很大压力。  


D)Free -m命令 : 用来显示内存使用情况



其中的相关说明:


Mem :表示物理内存统计


-/+ buffers/cached :表示物理内存的缓存统计


Swap :表示硬盘上交换分区的使用情况


total : 表示物理内存总数。


used : 表示总计分配给缓存(包含buffers  与 cache  )使用的数量,但其中可能部分缓存并未实际使用。


free : 未被分配的内存。


shared : 共享内存,一般系统不会用到 , 总是显示0 。


buffers : 系统分配但未被使用的buffers  数量。


cached : 系统分配但未被使用的cache  数量。


第二行: used : 实际使用的内存总量。


free : 这就是系统当前实际可用内存。


-/+ buffers/cache 开头的行:(重点看这行)


free 列是指应用程序还未使用的内存数。这个数据才是我们需要关注的空闲可用内存数。 如果此行中free 列的数据太小,那么就需要优化程序或者增加物理内存了。


总结:


( 1 ) uptime  与 w 命令查看平均负载


( 2 )使用top 命令查看负载,在 top 下按 “1” 查看 CPU 核心数量, shift+"c" 按 cpu 使用率大小排序, shif+"p " 按内存使用率高低排序;


( 3 )使用iostat -x  命令来监控 io 的输入输出是否过大


( 4 )使用 free -m 命令查看系统内存