Linux系统负载

查看系统负载

  • w 命 令
[root@zyxlinux01 ~]# w
 19:07:06 up 2 min,  1 user,  load average: 0.15, 0.10, 0.05
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0     19:07    2.00s  0.08s  0.03s w

第一行从左至右:系统当前时间,系统运行时间,当前登录系统内用户总数,平均负载(1分钟,5分钟,15分钟)

USER:显示登陆用户帐号名。用户重复登陆,该帐号也会重复出现。
 TTY:用户登陆所用的终端。
 FROM:显示用户在何处登陆系统。
 LOGIN@:是LOGIN AT的意思,表示登陆进入系统的时间。
 IDLE:用户空闲时间,从用户上一次任务结束后,开始记时。
 JCPU:一终端代号来区分,表示在摸段时间内,所有与该终端相关的进程任务所耗费的CPU时间。
 PCPU:指WHAT域的任务执行后耗费的CPU时间。
 WHAT:表示当前执行的任务。

  • uptime命令(命令结果与w命令结果第一行相同)
[root@zyxlinux01 ~]# uptime
 19:19:57 up 15 min,  1 user,  load average: 0.00, 0.01, 0.05

需要注意的是loadaverage这个输出值,这三个值的大小一般不能大于系统逻辑CPU的个数,如果loadaverage的三个值长期大于4时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于4时,倒不用担心,一般不会影响系统性能。相反,如果loadaverage的输出值小于CPU的个数,则表示CPU还有空闲。

cat /proc/cpuinfo:查看CPU信息


vmstat命令

[root@zyxlinux01 ~]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 781648    692  73644    0    0    39     3   26   38  0  1 99  0  0
 0  0      0 781632    692  73644    0    0     0     0   25   25  0  0 100  0  0
 0  0      0 781632    692  73644    0    0     0     0   25   19  0  0 100  0  0
 0  0      0 781632    692  73644    0    0     0     0   22   16  0  1 100  0  0
 0  0      0 781632    692  73644    0    0     0     0   23   28  0  0 100  0  0

1表示每一秒更新一次,5表示更新5次后结束更新

具体每一个参数的意义:

  • r: 表示运行队列(就是说多少个进程真的分配到CPU),当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

  • b: 表示阻塞的进程

  • swpd: 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

  • free: 空闲的物理内存的大小

  • buff: Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存

  • cache: cache直接用来记忆我们打开的文件,给文件做缓冲

  • si: 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉

  • so: 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上

  • bi: 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备(从磁盘里读取)

  • bo: 块设备每秒发送的块数量,读取文件时,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整(往磁盘里写入)

  • in: 每秒CPU的中断次数,包括时间中断

  • cs: 每秒上下文切换次数,例如调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目

  • us: 用户CPU时间

  • sy: 系统CPU时间,如果太高,表示系统调用时间长,IO操作频繁

  • id: 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率

  • wt: 等待IO CPU时间


top命令(查看进程使用资源情况)

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top是一个动态显示过程(默认每三秒刷新一次),可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.

命令参数:

-b: 批处理

-c: 显示完整的治命令

-I: 忽略失效过程

-s: 保密模式

-S: 累积模式

-i<时间>: 设置间隔时间

-u<用户名>: 指定用户名

-p<进程号>: 指定进程

-n<次数>: 循环显示的次数

top命令结果

  • 第一行:任务队列信息,同 uptime 命令的执行结果(当前系统时间,系统运行时间,登陆系统的用户总数,1,5,15分钟平均负载情况)

  • 第二行:Tasks — 任务(进程)依次为:总进程数,正在运行进程数,休眠状态进程数,已停止进程数,僵尸进程数。

  • 第三行:cpu状态信息,具体属性说明如下:

    us — 用户空间占用CPU的百分比

    sy — 内核空间占用CPU的百分比

    ni — 改变过优先级的进程占用CPU的百分比

    id — 空闲CPU百分比

    wa — IO等待占用CPU的百分比

    hi — 硬中断(Hardware IRQ)占用CPU的百分比

    si — 软中断(Software Interrupts)占用CPU的百分比

  • 第四行:内存状态,具体信息如下:

    total — 物理内存总量

    used — 使用中的内存总量

    free — 空闲内存总量

    buffers — 缓存的内存量

  • 第五行:swap交换分区信息,具体信息说明如下:

    total — 交换区总量

    used — 使用的交换区总量

    free — 空闲交换区总量

    cached — 缓冲的交换区总量

如果swap交换分区的used这个数值不断的变化,说明内核在不断进行内存和swap的数据交换,说明物理内存不够用了

  • 第六行:空行

  • 第七行及以下所有行:各进程(任务)的状态监控,项目列信息说明如下:

    PID — 进程id

    USER — 进程所有者

    PR — 进程优先级

    NI — nice值。负值表示高优先级,正值表示低优先级

    VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

    RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

    SHR — 共享内存大小,单位kb

    S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

    %CPU — 上次更新到现在的CPU时间占用百分比

    %MEM — 进程使用的物理内存百分比

    TIME+ — 进程使用的CPU时间总计,单位1/100秒

    COMMAND — 进程名称(命令名/命令行)

使用技巧

  • 在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:
Tasks: 213 total,   1 running, 212 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   1010884 total,   235940 used,   774944 free,      692 buffers
KiB Swap:  4194300 total,        0 used,  4194300 free.    75448 cached Mem
Tasks: 213 total,   1 running, 212 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.6 us,  0.6 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   1010884 total,   236264 used,   774620 free,      692 buffers
KiB Swap:  4194300 total,        0 used,  4194300 free.    75448 cached Mem
  • 敲击键盘“b”(打开/关闭加亮效果)

  • top默认的排序列是“%CPU”

  • top -c - 显示完整命令

2272 root      20   0  123716   1688   1180 R  17.6  0.2   0:00.05 top -c                                          
    1 root      20   0   50796   7124   2508 S   0.0  0.7   0:02.53 /usr/lib/systemd/systemd --switched-root --syst+
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.03 [kthreadd] 
  • top -bn1 - 一次性静态显示 n表示次数

  • top -d 3 - 表示更新周期为3秒

  • top -p 666 - 显示指定的进程(pid为666)的信息

在top基本视图中其他的一些命令

  • h - 显示帮助

  • i - 忽略闲置和僵死进程

  • q - 退出程序

  • m - 切换显示内存信息

  • t - 切换显示进程和CPU状态信息

  • c - 切换显示命令名称和完整命令行

  • M - 根据驻留内存大小进行排序

  • P - 根据CPU使用百分比大小进行排序

  • T - 根据时间/累计时间进行排序


sar命令

yum install -y sysstat 安装sar命令

sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等

sar命令常用格式

sar [options] [-A] [-o file] t [n]

其中:

t为采样间隔,n为采样次数,默认值是1;

-o file表示将命令结果以二进制格式存放在文件中,file 是文件名。

options 为命令行选项,常用选项:

-A:所有报告的总和

-u:输出CPU使用情况的统计信息

-v:输出inode、文件和其他内核表的统计信息

-d:输出每一个块设备的活动信息

-r:输出内存和交换空间的统计信息

-b:显示I/O和传送速率的统计信息

-a:文件读写情况

-c:输出进程统计信息,每秒创建的进程数

-R:输出内存页面的统计信息

-y:终端设备活动情况

-w:输出系统交换活动信息


使用实例

  • 'sar -n DEV 1 3' :每隔一秒显示一次网卡使用情况,显示三次后结束
[root@zyxlinux01 ~]# sar -n DEV 1 3
Linux 3.10.0-123.el7.x86_64 (zyxlinux01) 	2017年08月08日 	_x86_64_	(2 CPU)

13时48分25秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
13时48分26秒 eno16777736      0.00      0.00      0.00      0.00      0.00      0.00      0.00
13时48分26秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

13时48分26秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
13时48分27秒 eno16777736      1.00      1.00      0.06      0.40      0.00      0.00      0.00
13时48分27秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

13时48分27秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
13时48分28秒 eno16777736      1.00      1.00      0.06      0.40      0.00      0.00      0.00
13时48分28秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

平均时间:     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
平均时间: eno16777736      0.66      0.66      0.04      0.27      0.00      0.00      0.00
平均时间:        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • nload也可以动态的显示网卡速度情况,使用方向键可以在各个网卡间切换

  • sar -u -o test 5 3 每5秒采样一次,连续采样3次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件test中

[root@zyxlinux01 ~]# sar -u -o test 5 3
Linux 3.10.0-123.el7.x86_64 (zyxlinux01) 	2017年08月08日 	_x86_64_	(2 CPU)

14时24分27秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
14时24分32秒     all      0.00      0.00      0.10      0.00      0.00     99.90
14时24分37秒     all      0.10      0.00      0.20      0.00      0.00     99.70
14时24分42秒     all      0.00      0.00      0.10      0.00      0.00     99.90
平均时间:     all      0.03      0.00      0.13      0.00      0.00     99.83

CPU:all 表示统计信息为所有 CPU 的平均值

%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。

%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。

%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。

%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。

%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。

%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比

  1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈

  2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量

  3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU

sar -u -f test 查看二进制文件test中的内容

  • sar -v 10 3 : inode、文件和其他内核表监控
[root@zyxlinux01 ~]# sar -v 10 3
Linux 3.10.0-123.el7.x86_64 (zyxlinux01) 	2017年08月08日 	_x86_64_	(2 CPU)

14时29分10秒 dentunusd   file-nr  inode-nr    pty-nr
14时29分20秒     28030       928     20083         1
14时29分30秒     28030       928     20083         1
14时29分40秒     28030       928     20083         1
平均时间:     28030       928     20083         1

dentunusd:目录高速缓存中未被使用的条目数量

file-nr:文件句柄(file handle)的使用数量

inode-nr:索引节点句柄(inode handle)的使用数量

pty-nr:使用的pty数量

  • sar -r 10 3 : 内存和交换空间监控
[root@zyxlinux01 ~]# sar -r 2 3
Linux 3.10.0-123.el7.x86_64 (zyxlinux01) 	2017年08月08日 	_x86_64_	(2 CPU)

14时32分45秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
14时32分47秒    624760    386124     38.20       692    223108    264944      5.09    197572     78724         0
14时32分49秒    624760    386124     38.20       692    223108    264944      5.09    197572     78724         0
14时32分51秒    624760    386124     38.20       692    223108    264944      5.09    197572     78724         0
平均时间:    624760    386124     38.20       692    223108    264944      5.09    197572     78724         0

kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.

kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.

%memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.

kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.

kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).

%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比

  • sar -B 10 3 : 内存分页监控
[root@zyxlinux01 ~]# sar -B 2 3
Linux 3.10.0-123.el7.x86_64 (zyxlinux01) 	2017年08月08日 	_x86_64_	(2 CPU)

14时34分57秒  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
14时34分59秒      0.00      0.00     29.00      0.00     27.00      0.00      0.00      0.00      0.00
14时35分01秒      0.00      0.00     15.00      0.00     28.00      0.00      0.00      0.00      0.00
14时35分03秒      0.00      0.00      9.00      0.00     26.50      0.00      0.00      0.00      0.00
平均时间:      0.00      0.00     17.67      0.00     27.17      0.00      0.00      0.00      0.00

pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)

pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)

fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)

majflt/s:每秒钟产生的主缺页数.

pgfree/s:每秒被放入空闲队列中的页个数

pgscank/s:每秒被kswapd扫描的页个数

pgscand/s:每秒直接被扫描的页个数

pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数

%vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比

  • sar -b 10 3 : I/O和传送速率监控
[root@zyxlinux01 ~]# sar -b 2 3
Linux 3.10.0-123.el7.x86_64 (zyxlinux01) 	2017年08月08日 	_x86_64_	(2 CPU)

14时38分18秒       tps      rtps      wtps   bread/s   bwrtn/s
14时38分20秒      0.00      0.00      0.00      0.00      0.00
14时38分22秒      0.00      0.00      0.00      0.00      0.00
14时38分24秒      0.00      0.00      0.00      0.00      0.00
平均时间:      0.00      0.00      0.00      0.00      0.00

tps:每秒钟物理设备的 I/O 传输总量

rtps:每秒钟从物理设备读入的数据总量

wtps:每秒钟向物理设备写入的数据总量

bread/s:每秒钟从物理设备读入的数据量,单位为块/s

bwrtn/s:每秒钟向物理设备写入的数据量,单位为块/s

  • sar -q 10 3 :进程队列长度和平均负载状态监控
[root@zyxlinux01 ~]# sar -q 2 3
Linux 3.10.0-123.el7.x86_64 (zyxlinux01) 	2017年08月08日 	_x86_64_	(2 CPU)

14时39分46秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
14时39分48秒         0       231      0.00      0.01      0.05         0
14时39分50秒         1       231      0.00      0.01      0.05         0
14时39分52秒         1       231      0.00      0.01      0.05         0
平均时间:         1       231      0.00      0.01      0.05         0

runq-sz:运行队列的长度(等待运行的进程数)

plist-sz:进程列表中进程(processes)和线程(threads)的数量

ldavg-1:最后1分钟的系统平均负载(System load average)

ldavg-5:过去5分钟的系统平均负载

ldavg-15:过去15分钟的系统平均负载

  • sar -W 10 3 : 系统交换活动信息监控
[root@zyxlinux01 ~]# sar -W 2 3
Linux 3.10.0-123.el7.x86_64 (zyxlinux01) 	2017年08月08日 	_x86_64_	(2 CPU)

14时41分18秒  pswpin/s pswpout/s
14时41分20秒      0.00      0.00
14时41分22秒      0.00      0.00
14时41分24秒      0.00      0.00
平均时间:      0.00      0.00

pswpin/s:每秒系统换入的交换页面(swap page)数量

pswpout/s:每秒系统换出的交换页面(swap page)数量

  • sar -d 10 3 –p : 设备使用情况监控
[root@zyxlinux01 ~]# sar -d 2 3 -p
Linux 3.10.0-123.el7.x86_64 (zyxlinux01) 	2017年08月08日 	_x86_64_	(2 CPU)

14时42分37秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
14时42分39秒       sr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时42分39秒       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

14时42分39秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
14时42分41秒       sr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时42分41秒       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

14时42分41秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
14时42分43秒       sr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时42分43秒       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

平均时间:       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
平均时间:       sr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0

tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.

rd_sec/s:每秒读扇区的次数.

wr_sec/s:每秒写扇区的次数.

avgrq-sz:平均每次设备I/O操作的数据大小(扇区).

avgqu-sz:磁盘请求队列的平均长度.

await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).

svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.

%util:I/O请求占CPU的百分比,比率越大,说明越饱和.

  1. avgqu-sz 的值较低时,设备的利用率较高。

  2. 当%util的值接近 1% 时,表示设备带宽已经占满

怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看

怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看

怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看

posted @ 2017-09-22 22:18  指环王Raul  阅读(122)  评论(0编辑  收藏  举报