# 综合测试

# top

:一个命令行工具,可以显示 CPU、内存、进程等系统资源的统计信息。

  • 用法:
    $ top         # 打开 top 窗口
          -n 1    # 只显示一次就退出
    

#

[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 :进程的启动命令。

# 操作命令

打开 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 。

# vmstat

:一个与 top 类似的工具,但是可以记录常见指标的变化过程。

$ vmstat      # 显示系统的内存、磁盘 IO、CPU 等信息
        -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 使用率。
    • %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)