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 命令查看系统内存