Linux查看服务器负载
Linux的负载高,主要是由于CPU使用、内存使用、IO消耗三部分构成。任意一项使用过多,都将导致服务器负载的急剧攀升。
查看服务器负载有多种命令,w、vmstat或者uptime都可以直接展示负载。
[hs@master opt]$ uptime
11:00:06 up 106 days, 19:36, 3 users, load average: 0.00, 0.03, 0.05
信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
1可以被认为是最优的负载值。负载是会随着系统不同改变得。单CPU系统1-3和SMP系统6-10都是可能接受的。
[hs@master opt]$ w
11:00:38 up 106 days, 19:37, 3 users, load average: 0.00, 0.03, 0.05
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
spark59 pts/0 09:47 14:46 1:08 0.01s sshd: spark59 [priv]
spark59 pts/1 09:47 11:10 55.77s 0.00s sshd: spark59 [priv]
spark59 pts/2 09:58 6.00s 0.11s 0.00s sshd: spark59 [priv]
load average分别对应于过去1分钟,5分钟,15分钟的负载平均值。
[hs@master opt]$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2276632 132056 1544508 0 0 20 75 1 0 2 0 97 0 0
procs
r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
id 列显示了cpu处在空闲状态的时间百分比
system 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
memory
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
free 当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap
si 由内存进入内存交换区数量。
so由内存交换区进入内存数量。
IO
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。
以上三个个命令只是单纯的反映出负载,linux提供了更为强大,也更为实用的top命令来查看服务器负载。
top命令能够清晰的展现出系统的状态,而且它是实时的监控,按q退出。
[hs@master opt]$ top
top - 11:01:13 up 106 days, 19:37, 3 users, load average: 0.05, 0.04, 0.05
Tasks: 131 total, 1 running, 130 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.1 us, 0.3 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 8011936 total, 5733520 used, 2278416 free, 131392 buffers
KiB Swap: 0 total, 0 used, 0 free. 1543588 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32001 hs 20 0 1265020 256252 38172 S 2.3 3.2 0:56.77 java
2696 hs 20 0 3726664 447420 60 S 0.7 5.6 819:57.88 java
29566 root 20 0 64780 4668 2628 S 0.7 0.1 43:18.42 AliYunDun
1624 hs 20 0 1789456 292492 4928 S 0.3 3.7 298:23.89 java
2008 hs 20 0 1996320 438004 4604 S 0.3 5.5 849:44.95 java
2465 hs 20 0 1258944 170752 264 S 0.3 2.1 89:18.25 java
3284 hs 20 0 2867828 210788 3756 S 0.3 2.6 259:29.98 java
29580 root 20 0 836552 6320 2584 S 0.3 0.1 13:10.27 AliHids
1 root 20 0 63648 25184 1424 S 0.0 0.3 4:44.45 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:01.49 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 8:01.90 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:30.46 migration/0
Tasks行展示了目前的进程总数及所处状态,要注意zombie,表示僵尸进程,不为0则表示有进程出现问题。
Cpu(s)行展示了当前CPU的状态,us表示用户进程占用CPU比例,sy表示内核进程占用CPU比例,id表示空闲CPU百分比,wa表示IO等待所占用的CPU时间的百分比。wa占用超过30%则表示IO压力很大。
Mem行展示了当前内存的状态,total是总的内存大小,userd是已使用的,free是剩余的,buffers是目录缓存。
Swap行同Mem行,cached表示缓存,用户已打开的文件。如果Swap的used很高,则表示系统内存不足。
在top命令下,按1,则可以展示出服务器有多少CPU,及每个CPU的使用情况
一般而言,服务器的合理负载是CPU核数*2。也就是说对于8核的CPU,负载在16以内表明机器运行很稳定流畅。如果负载超过16了,就说明服务器的运行有一定的压力了。
在top命令下,按shift + "c",则将进程按照CPU使用率从大到小排序,按shift+"p",则将进程按照内存使用率从大到小排序,很容易能够定位出哪些服务占用了较高的CPU和内存。
仅仅有top命令是不够的,因为它仅能展示CPU和内存的使用情况,对于负载升高的另一重要原因——IO没有清晰明确的展示。linux提供了iostat命令,可以了解io的开销。
输入iostat -x 1 10命令,表示开始监控输入输出状态,-x表示显示所有参数信息,1表示每隔1秒监控一次,10表示共监控10次。
其中rsec/s表示读入,wsec/s表示每秒写入,这两个参数某一个特别高的时候就表示磁盘IO有很大压力,util表示IO使用率,如果接近100%,说明IO满负荷运转。
[hs@master opt]$ iostat -x 1 10
Linux 3.10.0-123.9.3.el7.x86_64 (master) 07/29/2016 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.47 0.00 0.38 0.20 0.00 96.95
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.86 0.77 1.45 50.88 139.71 172.11 0.18 81.22 3.87 122.28 1.52 0.34
vdb 0.00 37.36 0.37 3.16 28.06 159.69 106.50 0.02 4.69 5.87 4.55 1.86 0.65
avg-cpu: %user %nice %system %iowait %steal %idle
0.75 0.00 0.25 0.25 0.00 98.75
总结:
(1)使用top命令查看负载,在top下按“1”查看CPU核心数量,shift+"c"按cpu使用率大小排序,shif+"p"按内存使用率高低排序;
(2)使用iostat -x 命令来监控io的输入输出是否过大
更多推荐
所有评论(0)