# 综合测试

# top

:一个监控工具,能实时监控各进程的 CPU、内存等指标。

  • 用法:

    top           # 打开一个监控窗口
        -n <int>  # 在监控窗口刷新 n 次之后就退出
    
  • 打开 top 窗口之后可以输入以下命令:

    # 控制显示颜色
    x     # 加亮显示被排序的那一列
    y     # 加亮显示 Running 状态的每行进程
    b     # 将用 x、y 加亮显示的行和列填充底色
    z     # 将部分显示内容标上颜色
    
    # 控制显示内容
    i     # 隐藏 idle 或 Zombie 状态的进程
    H     # 切换第二行显示所有线程(Thread)的统计信息
    E/e   # 切换顶部或进程表中内存的显示单位
    c     # 切换显示完整的 Command
    V     # 切换显示 Command 的树状视图
    u     # 筛选显示的用户
    f     # 增加显示的字段比如 TTY(启动进程的终端名,不是从终端启动则显示 ?)、SWAP、nMaj(主缺页异常数)
    W     # 保存 top 的显示设置,下次启动 top 时自动重用
    
    # 控制显示效果
    s     # 改变显示内容的刷新间隔(默认为 3 秒刷新一次,按回车或空格可以手动刷新)
    Shift + <> # 左右切换按某列排序
    R     # 切换升序或降序排列
    L     # 搜索字符串默认显示第一个搜索结果的位置,按 & 则会查找下一个
    h/?   # 显示帮助页面
    
    # 控制进程
    k     # 根据 PID 选择一个进程,向它发送一个信号(默认发送 15)
    r     # 根据 PID 选择一个进程,设置它的优先级 NI
    
  • 例:

    [root@CentOS ~]# top
    top - 09:42:39 up 19 days, 6:36,  1 user,  load average: 0.11, 0.15, 0.11
    Tasks:  7 total,   1 running,  6 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  3.3 us,  1.7 sy,  0.0 ni, 95.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  1014740 total,   163768 free,   270932 used,   580040 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.   538612 avail Mem
    
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
        1 root      20   0  125200   3680   2404 S   0.0  0.0   0:01.09 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
        2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 [kthreadd]
        3 root      20   0       0      0      0 S   0.0  0.0   0:00.06 [ksoftirqd/0]
        4 root      20   0       0      0      0 S   0.0  0.0   0:00.52 [kworker/0:0]
        7 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 [migration/0]
        8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 [rcu_bh]
        9 root      20   0       0      0      0 S   0.0  0.0   0:01.71 [rcu_sched]
       10 root      rt   0       0      0      0 S   0.0  0.0   0:00.02 [watchdog/0]
       11 root      rt   0       0      0      0 S   0.0  0.0   0:00.02 [watchdog/1]
       12 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 [migration/1]
    
    • 第一行与 uptime 命令的显示内容相同。
    • 第二行是所有进程(Task)的统计信息。
    • 第三行是 CPU 使用率的统计信息。
      • 这里显示的是 CPU 所有核的平均使用率,按下键盘的 1 会分别显示各个核的使用率。
    • 第四行、第五行与 free 命令的显示信息相同。
    • 第六行是各进程的统计信息。
      • PR :进程的 Priority 优先级。
        • 取值为 rt 时表示 Real Time 类型的进程,省略其 Priority 值。
      • NI :进程的 NICE 谦让值。
      • VIRT :Virtual Memory ,虚拟内存。
      • RES :Resident Memory ,常驻内存。
      • SHR :Shared Memory ,共享内存。
      • S :Status ,进程的运行状态。
      • %CPU :进程的平均 CPU 使用率,每次刷新显示时会重新计算。
        • 这里统计的是进程在 CPU 单个核心上的使用率。如果超过 100% ,则说明进程需要多个 CPU 核心。
      • %MEM :进程的内存使用率,等于 RES 占内存总量的百分比。
      • TIME+ :进程占用的 CPU 时长(是用户态、内核态两种情况的总和),精确到百分之一秒。
        • Real Time :进程从启动时刻开始计算的运行时长(不管有没有占用 CPU )。
        • User CPU Time :进程在用户态占用的 CPU 时长。
        • System CPU Time :进程在内核态占用的 CPU 时长。
      • COMMAND :进程的启动命令。

# iotop

:一个监控工具,能实时监控各进程的磁盘 IO 。

  • 安装:yum install iotop
  • 用法:
    iotop         # 打开一个监控窗口
        -P        # 显示进程级别。默认显示线程级别
        -p <pid>  # 只显示指定 PID 的进程。默认显示所有进程
        -u <uid>  # 只显示指定用户的进程
        -n <int>  # 在监控窗口刷新 n 次之后就退出
        -d 1.5    # 每隔多少秒刷新一次监控窗口。默认为 1
    
  • 打开 iotop 窗口之后可以输入以下命令:
    a     # 显示开始执行 iotop 至今,每个进程的磁盘 IO 总量。默认显示每秒 IO 量
    p     # 切换显示进程、线程
    o     # 只显示当前磁盘 IO 量大于 0 的进程
    
  • 例:
    [root@CentOS ~]# iotop -P
    Total DISK READ :     123.64 K/s | Total DISK WRITE :       5.39 M/s
    Actual DISK READ:     123.64 K/s | Actual DISK WRITE:       3.72 M/s
      PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    13428 be/4 root        0.00 B/s  837.77 K/s  0.00 %  0.00 % filebeat
    15649 be/4 1001        0.00 B/s  810.15 K/s  0.00 %  0.01 % mysqld
      514 be/4 root        0.00 B/s  162.68 K/s  0.00 %  0.00 % systemd-journald
    
    • Total DISK 表示内核线程读写磁盘的量,不一定等于所有进程的总和。
    • Actual DISK 表示实际读写磁盘设备的量。
    • PRIO 列表示 IO 优先级。
    • DISK READ 列表示最近一秒的读取磁盘量。
    • SWAPIN 列表示占用 Swap 分区的百分比。
    • IO 列表示 iowait 类型的 CPU 使用率。

# vmstat

:一个监控工具,能以表格形式显示 CPU、内存、磁盘 IO 等监控指标。

vmstat                  # 在一行内显示 CPU、内存、磁盘 IO 等监控指标
      [delay [count]]   # 每隔 delay 秒显示一次,如果省略 delay 则只显示一次。最多显示 count 次,如果省略 count 则为无限次
      -w                # 按宽排版显示
      -t                # 增加显示时间戳
  • 例:
    [root@CentOS ~]# vmstat -wt 1
    procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu-------- -----timestamp-----
    r  b         swpd         free         buff        cache   si   so    bi    bo   in   cs  us  sy  id  wa  st                 CST
    2  0            0       163228       101368      1073712    0    0    20    17    3    5   3   2  95   0   0 2019-12-05 11:40:20
    0  0            0       163080       101368      1073712    0    0     0     0  217  264   5   4  91   0   0 2019-12-05 11:40:21
    0  0            0       163064       101368      1073720    0    0     0     0  244  313   4   4  92   0   0 2019-12-05 11:40:22
    
    • process 状态
      • r :等待 CPU 运行的进程数。最好为 0 ,表示 CPU 没有过载。
      • b :等待磁盘 IO 的进程数。最好为 0 ,表示磁盘 IO 没有过载。
    • swap 状态
      • si :每秒从虚拟内存读取的数据量,单位 KByte 。最好为 0 ,表示内存够用。
      • so :每秒写出到虚拟内存的数据量,单位 KByte 。最好为 0 ,表示内存够用。
    • io 状态
      • bi :每秒从磁盘读取的数据块数。
      • bo :每秒写入磁盘的数据块数。
    • system 状态
      • in :每秒的中断数。
      • cs :CPU 每秒的上下文切换数(context switches)。

# sysstat

:一个监控工具包,提供了一些查看系统各方面统计信息(statistics)的工具。

  • 安装:yum install sysstat

其中的常用命令如下:

# mpstat

mpstat      # 查看 CPU 的详细统计信息

# iostat

iostat      # 显示 CPU 使用情况和磁盘读写 tps、读写速率、读写总量等
      -x    # 增加显示读写等待时间等

# sar

sar [options]    # 显示某些指标的历史记录
    -n DEV       # 显示本机网络接口的收发速率
    -u           # 显示 CPU 的使用情况
    -r           # 显示内存的使用情况
    -b           # 显示磁盘 IO 的 tps
    -B           # 显示磁盘每秒读写的 page 数

sar [options] [interval [count]]  # 实时显示某些指标
    -u 1 10        # 显示 CPU 的使用情况,每秒显示一次,总共显示 10 次
  • sar 可以查看系统指标的历史记录,也可以实时查看。
  • sar 会每隔十分钟收集一次系统指标,并将它们保存到 /var/log/sa/ 目录下,每天保存一个文件。
  • 例:
    [root@CentOS ~]# sar -n DEV 1
    Linux 3.10.0-957.5.1.el7.x86_64 (centos)        12/05/2019      _x86_64_        (1 CPU)
    11:58:32 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
    11:58:33 AM      eth0     10.00     10.00      0.77      1.24      0.00      0.00      0.00
    11:58:33 AM        lo      2.00      2.00      0.16      0.16      0.00      0.00      0.00
    
    • IFACE :网络接口。
    • rxpck/s、txpck/s 分别表示每秒接收、发送的包数。
    • kB/s 是每秒的千字节数,cmp/s 是每秒的压缩包数,mcst/s 是每秒的多播数据包数。
    • txkB/s :每秒钟发送的千字节数。

# pidstat

pidstat
        -u    # 显示各个进程的 CPU 使用率
        -r    # 显示各个进程的内存使用率
        -d    # 显示各个进程的磁盘 IO 速率
        -w    # 显示各个进程的上下文切换情况
        -l    # 显示完整的 Command
  • 例:
    [root@CentOS ~]# pidstat -ul
    Linux 3.10.0-957.5.1.el7.x86_64 (centos)        12/05/2019      _x86_64_        (1 CPU)
    11:56:47 AM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
    11:56:47 AM     0         1    0.00    0.00    0.00    0.00     0  /usr/lib/systemd/systemd --system --deserialize 20
    11:56:47 AM     0         2    0.00    0.00    0.00    0.00     0  kthreadd
    11:56:47 AM     0         3    0.00    0.01    0.00    0.01     0  ksoftirqd/0
    11:56:47 AM     0         9    0.00    0.01    0.00    0.01     0  rcu_sched
    
    • %usr :用户态进程的 CPU 使用率。
    • %usr :内核态进程的 CPU 使用率。
    • %guest :本机作为宿主机来运行虚拟机时,%guest 表示虚拟机中某进程,在宿主机实际产生的 CPU 使用率。

# stress

:一个压力测试工具,可以消耗 CPU、内存、磁盘资源。但不会生成测试报告,需要同时运行 top 等命令进行监控。

  • 安装:yum install stress
  • 用法:
    stress
          --cpu 2         # 产生 2 个测试 CPU 的进程,不停调用 sqrt()函数
    
          --vm 2          # 产生 2 个测试内存分配的进程,不停调用 malloc()和 free()函数(占用用户态 cpu )
          --vm-bytes 256M # 每个进程分配多少字节(默认为 256M ,单位可以是 B、K、M、G)
          --vm-hang 10    # 每次分配的内存隔 10 秒后才释放
    
          --io 2          # 产生 2 个测试磁盘 IO 的进程,不停调用 sync()函数,将内存中的数据写到磁盘上
    
          --hdd 2         # 产生 2 个测试磁盘写入的进程,不停调用 write()和 unlink()函数
          --hdd-bytes 1G  # 每个进程创建一个多大的磁盘块(默认为 1G)
    
          -t 10s          # 持续测试的时长(默认一直测试,单位可以是 s、m、h、d、y)