Linux-系统监控命令

相关工具安装

系统压测工具 stress, 线程压测工具 sysbench, 系统性能工具包 sysstat, 磁盘I/O测试工具 fio, 网络性能测试工具 iperf:

1
dnf install -y stress sysbench sysstat fio iperf

(这里安装的都是测试工具, 查看的工具大多内置)

CPU 性能指标相关

查看 CUP 使用率

先进行压测:

1
stress -c 2 -i 2 --timeout 300s &
  • -c, --cpu, 指定使用的 CPU 核心数量, 模拟 CPU 负载
  • -i, --io, 指定使用的 I/O 操作数, 模拟 I/O 负载 (磁盘性能)
  • --timeout 300s 指定压力测试的时间

再查看系统 CPU 使用率:

1
mpstat -P ALL 5 2

(mpstat 用于查看系统中每个 CPU 核心的使用情况)

  • -P, processors, 指定一个 processor list, 这里表明所有 (可以用 CPU 编号指定)
  • 5 2, 每 5s 采集和输出一次, 共输出两次

查看系统平均负载:

1
uptime

查看上下文切换

进行上下文切换压测:

1
sysbench --threads=4 --time=300 threads run &
  • --threads=4, 指定 4 个线程进行测试
  • --time=300, 指定测试持续时间
  • threads run, 表示进行多线程压力测试
    (多线程并发考察的实际上就是上下文切换)

查看系统上下文切换:

1
vmstat 3 5
  • 3 5, 每 3 秒采样一次数据, 共采样 5 次

查看线程上下文切换:

1
pidstat -w 5 2 -t | grep sysbench
  • -w, 指定每 5 秒采样一次数据, 采样 2 次
  • -t, “threads”, 显示每个线程的统计信息, 不仅是进程级别

查看平均负载:

1
uptime

内存性能指标相关

查看系统内存

进行物理内存压力测试:

1
stress --vm 2 --vm-bytes 300M --vm-keep --timeout 300s &
  • --vm, 指定 virtual memory 压力进程个数
  • --vm-bytes, 每个 virtual memory 压力进程分配的内存大小
  • --vm-keep, 保持分配的内存不释放, 一直占用
  • --timeout 指定压力测试的时间

查看内存占用情况:

1
free -h

查看交换空间的积极度与优先级:

1
2
cat /proc/sys/vm/swappiness
swapon -s

(swappiness 是用来控制内存回收的: 值越高, 内核就会越积极使用 swap)

交换空间内存压测:

1
stress --vm 7 --vm-bytes 500M --vm-hang 5 --timeout 300s &
  • --vm-hang, 指定在内存释放之前 sleep 的时间 (感觉没什么用)

查看交换空间内存占用:

1
free -h

查看系统虚拟内存信息:

1
vmstat -a -S M 3 5
  • -a, 显示 active 和 inactive memory
  • -S, --unit, 用什么单位显示

查看进程内存

1
top

磁盘 I/O 性能相关

读写性能压测:

1
fio -filename=/data/test.file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w

查看磁盘 I/O 和吞吐量:

1
iostat -dh 3 3
  • -d, “disk”, 只显示磁盘设备的 I/O 统计
  • -h, “human”, 以人类可读方式显示
  • 3 3, 每隔 3 秒采集和显示一次 I/O 统计数据, 采集 3 次

也可以用 sar:

1
sar -dh 3 3

网络 I/O 性能指标

查看网络连接情况

1
netstat -ntpl

查看网络带宽

在服务端运行 (提供一个测试端点):

1
iperf -s

(会启动一个 iperf 服务器, 监听默认的 TCP 端口 5001,等待其他客户端进行连接)

  • -s, --server, run in server mode

在客户端运行:

1
iperf -c 192.168.177.20 -t 20 -i 5

(会输出网络带宽)

  • -c host, --client, 以 client 模式运行并连接 host (server)
  • -t n, --time, 指定测试持续时间
  • -i, --interval, 指定数据报告的间隔时间

查看吞吐量:

1
sar -n DEV 2 1
  • -n, “network”, 输出 network 相关统计数据, DEV 关键词表明输出每个 network device 的

uptime

参考

输出示例为:

1
02:39:52 up 1:45, 2 users, load average: 0.02, 0.47, 0.44
  • 02:39:52: 当前系统时间
  • up 1:45: 系统运行多久了
  • 2 users: 当前系统登录用户数
  • load average: 0.02, 0.47. 0.44, 过去 1 分钟, 5 分钟, 15 分钟的系统平均负载情况

平均负载

指单位时间内, 系统中可运行 (R, 指正在 CPU 上运行或者正等待 CPU) 和不可中断 (D, 指一些处于内核关键流程的进程) 进程的平均进程数.

1
平均负载 = (D + R) / CPU核数

ps

输出排序

--sort 参数, 如:

1
2
ps aux --sort -%cpu
# ps aux --sort +%cpu
  • - 表示数值递减 (从大到小).
  • + 表示数值递增 (从小到大).

vmstat

1
vmstat 5 3

的输出如:

1
2
3
4
5
6
7
procs -----------memory---------- ---swap-- -----io---- -system-- -------cpu-------
r b swpd free buff cache si so bi bo in cs us sy id wa st gu
2 0 0 6989360 25264 431968 0 0 20 10 1133 3172 4 1 94 1 0 0
1 0 0 6989384 25264 431968 0 0 0 0 33 43 0 0 100 0 0 0
1 0 0 6989384 25264 431968 0 0 0 0 25 35 0 0 100 0 0 0
1 0 0 6989384 25264 431968 0 0 0 0 32 37 0 0 100 0 0 0
1 0 0 6989384 25264 431968 0 0 0 0 29 41 0 0 100 0 0 0

各部分的含义为:

procs: 关于进程 (process) 的信息
    r: 表示在等待CPU资源的可运行进程数量 (runnable processes)
    b: 表示处于不可中断状态的进程数量 (blocked processes)

memory: 关于内存 (memory) 使用情况的信息
    swpd: 表示被换出到交换空间 (swap space) 的内存大小, 单位为KB
    free: 表示空闲内存的大小, 单位为KB
    buff: 表示用作缓冲区的内存大小, 单位为KB
    cache: 表示用作缓存的内存大小, 单位为KB

swap: 这一列包含了关于交换空间(swap space)的使用情况的信息。
    si: 表示从磁盘交换入内存的数据量, 单位为KB/秒.
    so: 表示从内存交换到磁盘的数据量, 单位为KB/秒.

io: 这一列包含了关于输入输出(I/O)操作的信息
    bi: 表示每秒从块设备读取的块数, 单位为块/秒
    bo: 表示每秒写入块设备的块数, 单位为块/秒

system: 这一列包含了关于系统调用和中断的信息
    in: 表示每秒的中断次数, 包括时钟中断
    cs: 表示每秒的上下文切换次数

cpu: 这一列包含了关于CPU使用率的信息
    us: 表示用户空间程序占用CPU时间的百分比
    sy: 表示系统空间程序占用CPU时间的百分比
    id: 表示CPU空闲时间的百分比
    wa: 表示等待I/O操作完成的CPU时间的百分比
    st: 表示被偷取 (被其他虚拟机或任务占用) 的CPU时间的百分比
    gu: 表示Guest操作系统占用CPU时间的百分比 (仅在虚拟化环境中可用)

sysbench

1
sysbench [options]... [testname] [command]

常见的 [testname] 有:

1
cpu, memory, threads, fileio

常见的 [command] 有:

1
prepare run cleanup help

pidstat

常见如:

1
pidstat -w -t 5 2

dd

如:

1
dd if=/dev/zero of=/mnt/swap bs=1M count=2048

/dev/zero 是一个特殊的设备文件, 在 Unix/Linux 系统中用于生成连续的空字节流. 读取 /dev/zero 将会无限地产生字节 0.


Linux-系统监控命令
http://example.com/2024/02/27/Linux-系统监控命令/
作者
Jie
发布于
2024年2月27日
许可协议