linux负载排查

来源:互联网 发布:php小项目源码 编辑:程序博客网 时间:2024/06/11 19:46

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压力很大
hiCPU处理硬件终端所占时间的比率;
siCPU处理软件终端所占时间的比率;
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表示缓存,用户已打开的文件。如果Swapused很高,则表示系统内存不足
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列的数据太小,那么就需要优化程序或者增加物理内存了。
总结:
1uptime w命令查看平均负载
2)使用top命令查看负载,在top下按“1”查看CPU核心数量,shift+"c"cpu使用率大小排序,shif+"p"按内存使用率高低排序;
3)使用iostat -x 命令来监控io的输入输出是否过大
4)使用free -m命令查看系统内存
0 0