# 综合测试
# top
:一个监控工具,能实时监控各进程的 CPU、内存等指标。
用法:
top # 打开一个监控窗口 -bn <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 :进程的启动命令。
- PR :进程的 Priority 优先级。
# 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)。
- process 状态
# 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)