cpu相关指标(top、uptime、vmstat、mpstat、sar、pidstat、ps、dstat、perf、tcpdump、lscpu)等常见使用方法

本文主要探讨了一系列用于监控和分析系统 CPU 性能的工具,包括 topuptimevmstatmpstatsarpidstatpsdstatperftcpdumplscpu。这些工具在系统管理和性能优化中起着关键的作用。通过实时监测进程、系统负载、虚拟内存、CPU 使用情况以及网络数据包,管理员可以全面了解系统资源的分布和使用情况,迅速发现和解决性能瓶颈,提高系统的运行效率和稳定性。文章将深入介绍每个工具的使用方法和功能,以帮助读者更好地理解和利用这些工具进行系统性能分析和优化。

平均负载(uptime、top)

top 命令是一个实时的系统资源监视器,用于查看系统中正在运行的进程的信息。以下是 top 命令的详细使用方法:

1. 基本格式:

bash 复制代码
top

2. 常用选项:

  • -c 显示完整的命令行。
  • -d 指定刷新时间,单位为秒。
  • -u 指定要显示的用户。
  • -p 指定要监视的进程。
  • -h 显示帮助信息。
  • q 退出 top

3. top 窗口主要区域:

  • 第一行: 系统概览,包括系统时间、运行时间、登录用户数、负载平均值等等。
  • 第二行: 进程总数、运行中的进程数、睡眠中的进程数、停止的进程数等。
  • 第三行: CPU 使用情况,包括用户空间、系统空间、空闲等百分比。
  • 第四行: 内存使用情况,包括总内存、已使用、空闲、缓冲区等。
  • 进程列表: 列出了当前运行的进程,包括进程 ID、用户、CPU 使用率、内存使用率、进程状态、启动时间等。

4. 操作:

  • k 结束一个进程,输入进程的 PID,按 Enter。
  • r 重新调整进程的优先级,输入进程的 PID,按 Enter,然后输入新的优先级值。
  • Space 切换排序方式,可以按照 CPU 使用率、内存使用率等排序。

5. 示例:

  1. 基本使用:

    bash 复制代码
    top
  2. 指定刷新时间为2秒:

    bash 复制代码
    top -d 2
  3. 显示完整的命令行:

    bash 复制代码
    top -c
  4. 指定要显示的用户:

    bash 复制代码
    top -u username
  5. 指定要监视的进程:

    bash 复制代码
    top -p pid

6. 注意事项:

  • top 默认按 CPU 使用率降序排序进程。按 Shift + M 键可以切换到按内存使用率排序。
  • top 是一个实时监控工具,通过不断更新显示当前系统状态。
  • 可以通过 man top 查看 top 的手册页,了解更多选项和用法。

top 提供了丰富的信息,可以通过键盘快捷键进行交互,方便用户实时监视系统状态。

uptime 命令用于显示系统的当前运行时间、平均负载以及当前登录用户数。以下是 uptime 命令的详细使用方法:

  1. 基本用法:

    bash 复制代码
    uptime

    这将显示系统的当前运行时间、平均负载以及当前登录用户数。

  2. 显示详细信息:

    bash 复制代码
    uptime -p

    这将显示更详细的系统运行时间,包括天数、小时、分钟。

  3. 定时刷新显示:

    bash 复制代码
    watch uptime

    这将周期性地刷新并显示 uptime 的输出,以实时监视系统的运行状况。

  4. 显示系统启动时间:

    bash 复制代码
    uptime -s

    这将显示系统的启动时间,即系统何时启动的。

  5. 显示平均负载:

    bash 复制代码
    uptime | cut -d "," -f 3-4

    这将只显示平均负载的部分,通常用于脚本或监控。

  6. 指定时间格式:

    bash 复制代码
    uptime -f

    这将以特定格式显示系统启动的时间。

  7. 以可读的方式显示平均负载:

    bash 复制代码
    uptime -r

    这将以可读的方式显示平均负载,例如 "2 days"。

  8. 显示每个核心的平均负载:

    bash 复制代码
    uptime -q

    这将显示每个核心的平均负载,适用于多核系统。

  9. 指定显示时间间隔:

    bash 复制代码
    uptime -i 5

    这将每隔 5 秒显示一次系统的运行时间、平均负载和当前登录用户数。

  10. 显示帮助信息:

bash 复制代码
uptime --help

这将显示 uptime 命令的帮助信息,列出可用的选项。

请注意,uptime 命令通常是系统监控和性能分析的起点之一,它提供了一个简单而有用的方式来查看系统的整体状况。

系统整体cpu使用率(vmstat、mpstat、top、sar、/proc/stat)

vmstat 命令用于报告虚拟内存统计信息,包括进程、内存、交换、IO 等。以下是 vmstat 命令的详细使用方法:

  1. 基本用法:

    bash 复制代码
    vmstat

    这将显示一组默认的虚拟内存统计信息,包括进程、内存、交换、IO 等。

  2. 指定刷新时间和次数:

    bash 复制代码
    vmstat [delay] [count]
    • delay 是刷新时间间隔,单位是秒。
    • count 是刷新次数。如果不指定 countvmstat 将一直运行。

    例如,vmstat 2 5 将每两秒刷新一次,共刷新五次。

  3. 显示详细信息:

    bash 复制代码
    vmstat -a

    这将显示更详细的系统活动统计信息,包括内存、交换、IO 等。

  4. 显示活动与非活动内存统计:

    bash 复制代码
    vmstat -a -S m

    这将以 MB 为单位显示内存统计信息。

  5. 仅显示指定内容:

    bash 复制代码
    vmstat -s

    这将只显示汇总的内存、交换、中断等信息,而不显示进程和IO的详细信息。

  6. 显示磁盘IO统计信息:

    bash 复制代码
    vmstat -d

    这将显示磁盘的读写统计信息。

  7. 显示系统中断和上下文切换:

    bash 复制代码
    vmstat -i

    这将显示中断和上下文切换的统计信息。

  8. 显示 CPU 利用率详细信息:

    bash 复制代码
    vmstat -P ALL

    这将显示每个 CPU 的利用率详细信息。

  9. 显示内存和交换空间使用情况:

    bash 复制代码
    vmstat -SM

    这将以 MB 为单位显示内存和交换空间的使用情况。

  10. 显示进程的统计信息:

    bash 复制代码
    vmstat -p [disk]

    这将显示进程的统计信息,包括在等待磁盘的进程。

  11. 显示内存的 slab 统计信息:

    bash 复制代码
    vmstat -m

    这将显示内核 slab 的统计信息。

  12. 显示版本信息:

    bash 复制代码
    vmstat -V

    这将显示 vmstat 的版本信息。

  13. 显示帮助信息:

    bash 复制代码
    vmstat --help

    这将显示 vmstat 命令的帮助信息,列出可用的选项。

vmstat 命令对于监视系统整体性能、识别性能瓶颈非常有用。通过不同的选项,你可以选择显示不同类型的统计信息。

sar(System Activity Reporter)是一个用于报告系统活动统计信息的工具。它可以显示系统的各种性能参数,如CPU使用率、内存使用率、磁盘I/O、网络活动等。以下是 sar 命令的一些详细使用方法:

  1. 基本用法:

    bash 复制代码
    sar

    运行 sar 命令将显示当前日期的系统活动报告。

  2. 指定时间间隔和次数:

    bash 复制代码
    sar [interval] [count]
    • interval 是报告之间的时间间隔(以秒为单位)。
    • count 是报告的次数。

    例如,sar 5 3 将每5秒生成一次报告,共生成3次。

  3. 显示CPU利用率:

    bash 复制代码
    sar -u

    这将显示CPU的使用率,包括用户、系统和空闲时间。

  4. 显示内存使用情况:

    bash 复制代码
    sar -r

    这将显示内存的使用情况,包括空闲、缓存和已使用的内存。

  5. 显示磁盘I/O统计信息:

    bash 复制代码
    sar -b

    这将显示磁盘I/O的统计信息,包括每秒的读写次数、读写块数等。

  6. 显示队列和负载信息:

    bash 复制代码
    sar -q

    这将显示系统队列的统计信息,包括进程队列长度和平均负载。

  7. 显示网络统计信息:

    bash 复制代码
    sar -n DEV

    这将显示网络接口的统计信息,包括接收和发送的数据包数量、错误等。

  8. 显示系统调用和交换空间统计:

    bash 复制代码
    sar -S

    这将显示系统调用和交换空间的统计信息。

  9. 显示文件系统统计信息:

    bash 复制代码
    sar -f /var/log/sa/sa<DD>

    替换 <DD> 为某一天的日期(如01,02),这将显示指定日期的文件系统统计信息。

  10. 显示进程创建和删除的统计信息:

    bash 复制代码
    sar -c

    这将显示进程的创建和删除的统计信息。

  11. 显示交换分区的统计信息:

    bash 复制代码
    sar -W

    这将显示交换分区的统计信息。

  12. 以ASCII图形显示实时负载信息:

    bash 复制代码
    sar -q -n DEV -u -o | sadf -g

    这将以ASCII图形形式显示CPU使用率、队列长度和网络活动的实时图形。

  13. 显示版本信息:

    bash 复制代码
    sar -V

    这将显示 sar 命令的版本信息。

  14. 显示帮助信息:

    bash 复制代码
    sar --help

    这将显示 sar 命令的帮助信息,列出可用的选项。

sar 命令提供了丰富的系统活动报告,可以根据具体需求选择不同的选项进行监控。

mpstat(Multiple Processor Statistics)是一个用于显示多处理器系统中各个处理器的使用情况的工具。以下是 mpstat 命令的详细使用方法:

  1. 基本用法:

    bash 复制代码
    mpstat

    运行 mpstat 命令将显示所有可用处理器的平均统计信息。

  2. 指定时间间隔和次数:

    bash 复制代码
    mpstat [interval] [count]
    • interval 是报告之间的时间间隔(以秒为单位)。
    • count 是报告的次数。

    例如,mpstat 5 3 将每5秒生成一次报告,共生成3次。

  3. 显示指定处理器的统计信息:

    bash 复制代码
    mpstat -P ALL

    这将显示所有处理器的详细统计信息,包括每个处理器的使用率、空闲率等。

  4. 显示指定处理器的统计信息(指定处理器编号):

    bash 复制代码
    mpstat -P <processor_number>

    替换 <processor_number> 为特定处理器的编号。例如,mpstat -P 0 将显示处理器 0 的统计信息。

  5. 以JSON格式输出统计信息:

    bash 复制代码
    mpstat -o JSON

    这将以JSON格式输出处理器的统计信息。

  6. 显示CPU的软中断和硬中断信息:

    bash 复制代码
    mpstat -I SUM

    这将显示CPU的软中断和硬中断的总体信息。

  7. 显示详细的I/O统计信息:

    bash 复制代码
    mpstat -d

    这将显示磁盘I/O的详细统计信息,包括读写速率、IOPS等。

  8. 显示内存统计信息:

    bash 复制代码
    mpstat -s

    这将显示内存的统计信息,包括页面交换、缺页错误等。

  9. 显示任务上下文切换和中断统计信息:

    bash 复制代码
    mpstat -w

    这将显示任务上下文切换和中断的统计信息。

  10. 显示虚拟内存和文件交换统计信息:

    bash 复制代码
    mpstat -W

    这将显示虚拟内存和文件交换的统计信息。

  11. 显示指定进程的统计信息:

    bash 复制代码
    mpstat -p <process_id>

    替换 <process_id> 为特定进程的标识符(PID)。这将显示指定进程的统计信息。

  12. 显示版本信息:

    bash 复制代码
    mpstat -V

    这将显示 mpstat 命令的版本信息。

  13. 显示帮助信息:

    bash 复制代码
    mpstat --help

    这将显示 mpstat 命令的帮助信息,列出可用的选项。

mpstat 命令是一个强大的工具,通过不同的选项可以获取系统各个方面的性能统计信息,有助于分析系统的负载和性能。

/proc/stat 文件提供了关于系统各种统计信息的实时信息,包括CPU使用情况、中断、上下文切换等。以下是对 /proc/stat 的详细使用方法:

  1. 查看整体统计信息:

    bash 复制代码
    cat /proc/stat

    运行上述命令将输出 /proc/stat 文件中的整体统计信息。

  2. 显示CPU使用情况:

    bash 复制代码
    grep 'cpu ' /proc/stat

    上述命令将显示所有CPU的使用情况,包括用户态、系统态、空闲等时间。

  3. 显示指定CPU核心的使用情况:

    bash 复制代码
    grep 'cpu<core_number>' /proc/stat

    <core_number> 替换为特定CPU核心的编号,例如,cpu0 表示第一个CPU核心。

  4. 显示中断信息:

    bash 复制代码
    grep 'intr ' /proc/stat

    此命令将显示中断的统计信息,包括每个中断的触发次数。

  5. 显示上下文切换信息:

    bash 复制代码
    grep 'ctxt ' /proc/stat

    此命令将显示上下文切换的统计信息,包括自引导以来的上下文切换次数。

  6. 显示软中断信息:

    bash 复制代码
    grep 'softirq ' /proc/stat

    此命令将显示软中断的统计信息,包括每个软中断的触发次数。

  7. 显示系统启动时间:

    bash 复制代码
    grep 'btime ' /proc/stat

    此命令将显示系统启动的时间戳。

  8. 显示内存页的统计信息:

    bash 复制代码
    grep 'page ' /proc/stat

    此命令将显示内存页的统计信息,包括页的读写、交换等情况。

  9. 显示系统启动后的空闲时间:

    bash 复制代码
    grep 'idle ' /proc/stat

    此命令将显示系统启动后的总空闲时间,包括所有CPU核心。

  10. 显示CPU核心的详细信息:

    bash 复制代码
    grep 'cpu<core_number>' /proc/stat

    替换 <core_number> 为特定CPU核心的编号,例如,cpu0

  11. 显示中断的详细信息:

    bash 复制代码
    grep 'intr' /proc/stat

    此命令将显示中断的详细信息,包括每个中断的触发次数。

  12. 显示上下文切换的详细信息:

    bash 复制代码
    grep 'ctxt' /proc/stat

    此命令将显示上下文切换的详细信息,包括自引导以来的上下文切换次数。

  13. 显示软中断的详细信息:

    bash 复制代码
    grep 'softirq' /proc/stat

    此命令将显示软中断的详细信息,包括每个软中断的触发次数。

  14. 显示CPU的详细信息:

    bash 复制代码
    grep '^cpu[0-9]' /proc/stat

    此命令将显示每个CPU核心的详细信息,包括用户态、系统态、空闲等时间。

  15. 显示CPU时间的详细信息:

    bash 复制代码
    grep '^cpu ' /proc/stat

    此命令将显示总体CPU时间的详细信息,包括用户态、系统态、空闲等时间。

/proc/stat 文件的内容可能有点庞大,但可以根据具体需求使用上述命令提取感兴趣的统计信息。

进程CPU使用率(top、pidstat、ps、htop、atop)

pidstat 是一个用于监视进程资源使用情况的工具,通常属于 sysstat 软件包的一部分。下面是一些 pidstat 的详细使用方法:

bash 复制代码
pidstat [选项] [间隔时间 [次数]]

常见选项:

  • -u:显示 CPU 使用情况。
  • -r:显示内存使用情况。
  • -d:显示磁盘 I/O 使用情况。
  • -w:显示上下文切换和任务切换。
  • -p <pid>:指定监视的进程号。
  • -t:显示线程级别的统计。
  • -h:以可读格式显示统计信息。
  • -I <interval>:设置报告间隔时间(秒)。
  • -U:显示 CPU 使用情况的累积值。

示例用法:

  1. 监视 CPU 使用情况:

    bash 复制代码
    pidstat -u 1

    这将以1秒的间隔显示每个进程的 CPU 使用情况。

  2. 监视特定进程的 CPU 使用情况:

    bash 复制代码
    pidstat -u -p <pid> 1

    替换 <pid> 为要监视的进程号。

  3. 显示内存使用情况:

    bash 复制代码
    pidstat -r 1

    这将以1秒的间隔显示每个进程的内存使用情况。

  4. 显示磁盘 I/O 使用情况:

    bash 复制代码
    pidstat -d 1

    这将以1秒的间隔显示每个进程的磁盘 I/O 使用情况。

  5. 显示上下文切换和任务切换:

    bash 复制代码
    pidstat -w 1

    这将以1秒的间隔显示每个进程的上下文切换和任务切换情况。

  6. 显示线程级别的统计:

    bash 复制代码
    pidstat -t 1

    这将以1秒的间隔显示每个进程的线程级别的统计信息。

  7. 显示 CPU 使用情况的累积值:

    bash 复制代码
    pidstat -U 1

    这将以1秒的间隔显示 CPU 使用情况的累积值。

注意事项:

  • pidstat 默认情况下会显示所有正在运行的进程。可以通过 -p 选项指定要监视的特定进程。
  • 间隔时间和次数是可选的,如果不提供,默认将显示一次统计信息。
  • pidstat 的详细输出包括 CPU 用户空间时间、CPU 内核空间时间、CPU 空闲时间、内存使用、磁盘 I/O 等信息。

ps 是一个用于显示当前系统进程状态的命令。以下是 ps 命令的一些详细使用方法:

bash 复制代码
ps [选项]

常见选项:

  1. 进程选择选项:

    • a:显示所有进程,包括其他用户的进程。
    • u:以用户为中心显示进程信息。
    • x:显示没有控制终端的进程。
    bash 复制代码
    ps aux

    这将显示所有用户的详细进程信息。

  2. 输出格式选项:

    • o:自定义输出格式。
    • f:以树状结构显示进程关系。
    bash 复制代码
    ps aux --sort=-%cpu

    这将按 CPU 使用率降序显示所有用户的详细进程信息。

  3. 进程状态选项:

    • r:显示运行中的进程。
    • s:显示休眠中的进程。
    bash 复制代码
    ps aux --state R

    这将显示所有运行中的进程。

  4. 进程排序选项:

    • --sort:按指定列进行排序。
    bash 复制代码
    ps aux --sort=-%mem

    这将按内存使用率降序显示所有用户的详细进程信息。

  5. 其他选项:

    • e:显示环境变量。
    • www:宽输出,适用于显示长命令行。
    bash 复制代码
    ps auxe

    这将显示带有环境变量的所有用户的详细进程信息。

示例用法:

  1. 显示当前用户的所有进程:

    bash 复制代码
    ps
  2. 显示所有用户的详细进程信息:

    bash 复制代码
    ps aux
  3. 以树状结构显示进程关系:

    bash 复制代码
    ps auxf
  4. 按 CPU 使用率降序显示所有用户的详细进程信息:

    bash 复制代码
    ps aux --sort=-%cpu
  5. 显示运行中的进程:

    bash 复制代码
    ps aux --state R
  6. 按内存使用率降序显示所有用户的详细进程信息:

    bash 复制代码
    ps aux --sort=-%mem
  7. 显示带有环境变量的所有用户的详细进程信息:

    bash 复制代码
    ps auxe

注意事项:

  • ps 命令的选项和输出格式可能在不同的操作系统上有所不同。上述示例主要针对 Linux 系统,其他 Unix 系统可能有些许区别。

htop 是一个交互式的系统监视工具,它可以以颜色和图形的形式展示系统的各种信息。以下是 htop 的一些详细使用方法:

  1. 安装 htop:

    在大多数 Linux 发行版中,可以使用包管理器安装 htop

    bash 复制代码
    sudo apt-get install htop  # Ubuntu/Debian
    sudo yum install htop      # CentOS/RHEL
  2. 运行 htop:

    直接在终端中输入 htop 并按回车键即可启动 htop

    bash 复制代码
    htop
  3. htop 主要界面元素:

    • 顶部区域: 包含系统整体的负载信息、CPU 使用率、内存使用情况等。
    • 进程列表: 显示当前运行的进程列表,按 CPU 使用率或内存使用率排序。
    • 底部区域: 提供可用的快捷键列表。
  4. 基本操作:

    • 使用箭头键在进程列表中导航。
    • 使用 F5 刷新显示。
    • 使用 F9 打开进程操作菜单,可以选择杀死进程等选项。
    • 使用 F10 退出 htop
  5. 颜色标识:

    htop 使用颜色标识不同类型的进程和系统资源使用情况,比如 CPU 使用率、内存使用率、交换空间等。

  6. 进程操作:

    • 使用 F9 进入进程操作菜单,选择需要的操作,如杀死进程。
    • 使用 k 键杀死选中的进程。
  7. 搜索进程:

    • 使用 / 键输入关键字搜索进程。
  8. 设置选项:

    • 使用 F2 进入设置界面,可以配置显示选项、排序方式等。
  9. 快捷键:

    htop 提供了一系列快捷键,可以在底部区域查看。例如:

    • F1 显示帮助。
    • F3F4 用于搜索进程。
    • F6 选择排序方式。
    • ...

注意事项:

  • htop 可以根据系统配置和权限的不同而提供不同的功能,一些操作可能需要 root 权限。
  • htop 的功能和界面可能在不同的操作系统和版本中有所不同,上述介绍主要基于 Linux 系统。

atop 是一个类似于 top 的系统性能监视工具,但它提供了更多的功能和更详细的信息。以下是 atop 的一些详细使用方法:

  1. 安装 atop:

    在大多数 Linux 发行版中,可以使用包管理器安装 atop

    bash 复制代码
    sudo apt-get install atop  # Ubuntu/Debian
    sudo yum install atop      # CentOS/RHEL
  2. 运行 atop:

    直接在终端中输入 atop 并按回车键即可启动 atop

    bash 复制代码
    atop
  3. atop 主要界面元素:

    • 顶部区域: 包含系统整体的负载信息、CPU 使用率、内存使用情况等。
    • 进程列表: 显示当前运行的进程列表,按 CPU 使用率或内存使用率排序。
    • 底部区域: 提供了可用的快捷键列表。
  4. 基本操作:

    • 使用箭头键在进程列表中导航。
    • 使用 t 切换显示模式,包括 cpumemdisk 等。
    • 使用 P 切换到按 CPU 使用率排序的进程列表,使用 M 切换到按内存使用率排序的列表。
  5. 颜色标识:

    atop 使用颜色标识不同类型的进程和系统资源使用情况,类似于 htop

  6. 进程操作:

    • 使用 k 键杀死选中的进程。
    • 使用 r 键重启选中的进程。
  7. 搜索进程:

    • 使用 : 键输入关键字搜索进程。
  8. 设置选项:

    • 使用 O 进入设置界面,可以配置显示选项、排序方式等。
  9. 显示磁盘和网络信息:

    • 使用 d 切换到显示磁盘信息。
    • 使用 n 切换到显示网络信息。
  10. 快捷键:

atop 提供了一系列快捷键,可以在底部区域查看。例如:

  • ? 显示帮助。
  • q 退出 atop
  1. 查看历史记录:

    • 使用 t 键可以查看系统资源的历史记录。
  2. 保存数据:

    • 使用 W 键将当前 atop 的状态保存到文件中。

注意事项:

  • atop 需要 root 权限来访问某些系统信息。
  • atop 提供了丰富的信息和功能,可以通过手册页 (man atop) 查看更详细的文档。

系统上下文切换(vmstat)

进程上下文切换(pidstatat)

软中断(top、/proc/softirqs、mpstat)

/proc/softirqs 文件提供了有关软中断(softirqs)的信息。软中断是内核用于在内核上下文中异步执行延迟工作的一种机制。/proc/softirqs 文件显示了每个软中断的统计信息。以下是使用该文件的一些详细方法:

  1. 查看 /proc/softirqs 内容:

    直接使用 cat 命令查看 /proc/softirqs 文件的内容:

    bash 复制代码
    cat /proc/softirqs

    输出将显示软中断的统计信息,按照软中断类型和 CPU 核心分组。

  2. 软中断的列说明:

    输出的列包括:

    • CPU 核心编号: 列的第一列显示 CPU 的编号。
    • 软中断类型: 除了 CPU 列之外的列包含不同类型的软中断。
    • Counter: 每个软中断类型的计数器,表示软中断已经触发的次数。

    示例如下:

    yaml 复制代码
    CPU0       CPU1       CPU2       CPU3       
    ...
    HI:      16693      12848       9694      15849   Hardware interrupts
    ...
    TIMER:   35946      29293      29872      28846   Timer interrupts
    ...
  3. 解释软中断类型:

    • HI (Hardware interrupts): 硬中断,表示硬件设备引起的中断。
    • TIMER (Timer interrupts): 定时器中断,由系统定时器引起的中断。
    • 其他类型的软中断也可能出现,取决于系统配置和正在运行的任务。
  4. 监控软中断:

    • 如果你想监控软中断的变化,可以使用类似 watch 命令:

      bash 复制代码
      watch -n 1 cat /proc/softirqs

      这将每秒刷新一次软中断的统计信息。

注意事项:

  • /proc/softirqs 文件提供了一种实时查看软中断统计信息的方法,用于诊断系统性能问题。
  • 软中断是内核中的一种异步执行机制,通常用于处理网络数据包、磁盘 I/O 等。
  • 在解释软中断统计时,重要的是查看相邻两次采样之间的变化,而不仅仅关注绝对值。

硬中断(vmstat、/proc/interrupts)

/proc/interrupts 文件提供了关于系统中断的详细信息,包括每个 IRQ(Interrupt Request)线路的中断请求统计。以下是使用该文件的详细方法:

  1. 查看 /proc/interrupts 内容:

    直接使用 cat 命令查看 /proc/interrupts 文件的内容:

    bash 复制代码
    cat /proc/interrupts

    输出将显示每个 IRQ 线路上的中断请求统计,按照 CPU 核心和中断类型分组。

  2. IRQ 统计列的说明:

    输出的列包括:

    • IRQ: 中断请求线路的编号。
    • CPU 核心编号: 列的第一列显示 CPU 的编号。
    • Count: 每个 IRQ 线路的中断请求数量。

    示例如下:

    makefile 复制代码
               CPU0       CPU1       CPU2       CPU3       
    ...
    16:          0          0          0          0   IR-PCI-MSI 344064-edge xhci_hcd
    17:          0          0          0          0   IR-PCI-MSI 294912-edge i915
    18:          0          0          0          0   IR-PCI-MSI 262144-edge ahci[0000:00:1f.2]
    ...
  3. 解释中断类型:

    • IR-PCI-MSI: 使用 PCI MSI(Message Signaled Interrupts)机制的设备的中断。
    • edge: 使用传统的中断触发方式的设备。

    其他类型的中断也可能出现,具体取决于系统硬件和正在运行的任务。

  4. 监控中断:

    • 如果你想监控中断的变化,可以使用类似 watch 命令:

      bash 复制代码
      watch -n 1 cat /proc/interrupts

      这将每秒刷新一次中断统计信息。

注意事项:

  • /proc/interrupts 文件提供了实时查看系统中断统计信息的方法,用于诊断系统性能问题。
  • 中断请求是硬件设备(如网卡、磁盘控制器)向 CPU 发送的信号,通知 CPU 某事件已发生需要处理。
  • 通过监控中断,可以了解系统中哪些设备产生了中断,以及这些中断是否超过了正常范围,有助于识别可能的性能问题。

网络(dstat、sar、tcpdump)

dstat 是一个用于实时监控系统资源使用情况的工具,它可以提供关于 CPU、内存、磁盘、网络等方面的详细统计信息。以下是 dstat 的一些常用用法:

  1. 基本用法:

    最简单的使用方法是在终端中直接运行 dstat 命令:

    bash 复制代码
    dstat

    这将显示默认情况下的一些基本性能统计信息,包括 CPU 使用率、内存使用率、磁盘 I/O 等。

  2. 指定显示内容:

    使用 -c-m-d 等选项可以指定要显示的内容。例如,显示 CPU 使用率和内存使用情况:

    bash 复制代码
    dstat -c -m
  3. 实时更新间隔:

    使用 -t 选项可以指定 dstat 的刷新间隔,单位为秒。例如,每隔 2 秒更新一次:

    bash 复制代码
    dstat -t 2
  4. 显示网络信息:

    使用 -n 选项可以显示网络相关的统计信息:

    bash 复制代码
    dstat -n
  5. 显示磁盘信息:

    使用 -d 选项可以显示磁盘 I/O 相关的信息:

    bash 复制代码
    dstat -d
  6. 显示系统信息:

    使用 -s 选项可以显示系统相关的信息,包括系统调用、中断等:

    bash 复制代码
    dstat -s
  7. 显示进程信息:

    使用 -p 选项可以显示进程相关的信息,包括进程 CPU、内存占用等:

    bash 复制代码
    dstat -p
  8. 保存输出到文件:

    使用 --output 选项可以将 dstat 的输出保存到文件中,以便后续分析:

    bash 复制代码
    dstat --output dstat_output.csv

    这将把输出保存到 dstat_output.csv 文件中。

  9. 显示颜色化输出:

    使用 --color 选项可以启用颜色化的输出,提高可读性:

    bash 复制代码
    dstat --color

    颜色化输出将以不同颜色区分不同的统计信息。

  10. 显示帮助信息:

    如果需要查看更多选项和用法,可以使用 --help 选项:

    bash 复制代码
    dstat --help

dstat 提供了丰富的选项和灵活的配置,可以根据需要监控系统的不同方面。在使用时,可以根据具体的需求选择合适的选项组合。

tcpdump 是一个网络抓包工具,用于捕获和分析网络数据包。以下是一些常见的 tcpdump 用法和选项:

  1. 基本用法:

    最简单的 tcpdump 命令用法是:

    bash 复制代码
    tcpdump

    这将捕获系统上的所有网络接口的数据包。

  2. 指定网络接口:

    使用 -i 选项可以指定要监听的网络接口。例如,监听 eth0 接口:

    bash 复制代码
    tcpdump -i eth0
  3. 过滤特定主机或网络:

    使用过滤器可以限制捕获的数据包。例如,只捕获源或目标是特定 IP 地址的数据包:

    bash 复制代码
    tcpdump host 192.168.1.1

    或者只捕获特定网络的数据包:

    bash 复制代码
    tcpdump net 192.168.1.0/24
  4. 保存到文件:

    使用 -w 选项可以将捕获的数据包保存到文件中:

    bash 复制代码
    tcpdump -w capture.pcap

    这将把捕获的数据包保存到 capture.pcap 文件中,后续可以使用其他工具进行分析。

  5. 读取保存的文件:

    使用 -r 选项可以读取之前保存的数据包文件:

    bash 复制代码
    tcpdump -r capture.pcap
  6. 指定端口:

    使用 port 关键字可以捕获特定端口的数据包:

    bash 复制代码
    tcpdump port 80

    这将捕获目标或源端口是 80 的数据包。

  7. 显示更多详细信息:

    使用 -v-vv-vvv 选项可以增加详细程度,显示更多的信息:

    bash 复制代码
    tcpdump -vv
  8. 显示 ASCII 数据:

    使用 -A 选项可以显示捕获的数据包的 ASCII 数据:

    bash 复制代码
    tcpdump -A
  9. 显示时间戳:

    使用 -t 选项可以显示每个数据包的时间戳:

    bash 复制代码
    tcpdump -t
  10. 显示端口号对应的服务名称:

    使用 -n 选项可以防止 tcpdump 尝试将端口号转换为服务名称:

    bash 复制代码
    tcpdump -n
  11. 显示 ICMP 报文:

    使用 icmp 关键字可以捕获 ICMP 报文:

    bash 复制代码
    tcpdump icmp
  12. 显示特定协议:

    使用 proto 关键字可以捕获特定协议的数据包。例如,只显示 TCP 数据包:

    bash 复制代码
    tcpdump proto tcp

    或只显示 UDP 数据包:

    bash 复制代码
    tcpdump proto udp

这只是 tcpdump 的一些常见用法,该工具提供了丰富的选项和过滤器,可以根据需要进行更复杂的网络数据包分析。

I/O(dstat、sar)

CPU个数(/proc/cpuinfo、lscpu)

/proc/cpuinfo 文件包含有关系统上的每个 CPU 的信息。以下是使用 /proc/cpuinfo 的一些常见用法:

  1. 查看 CPU 信息:

    使用 cat 命令可以查看整个 /proc/cpuinfo 文件的内容:

    bash 复制代码
    cat /proc/cpuinfo

    这将显示有关每个 CPU 的详细信息,包括型号、速度、缓存等。

  2. 显示 CPU 的物理核数:

    使用 grep 命令可以筛选物理核心的数量:

    bash 复制代码
    grep "physical id" /proc/cpuinfo | sort -u | wc -l

    这将显示系统中的物理 CPU 数量。

  3. 显示 CPU 的逻辑核数:

    使用 grep 命令可以筛选逻辑核心的数量:

    bash 复制代码
    grep "processor" /proc/cpuinfo | wc -l

    这将显示系统中的逻辑 CPU 数量。

  4. 显示 CPU 的型号和速度:

    使用 grep 命令可以筛选 CPU 的型号和速度信息:

    bash 复制代码
    grep "model name" /proc/cpuinfo
    grep "cpu MHz" /proc/cpuinfo

    这将显示每个 CPU 的型号和速度。

  5. 显示 CPU 缓存信息:

    使用 grep 命令可以筛选 CPU 缓存信息:

    bash 复制代码
    grep "cache size" /proc/cpuinfo

    这将显示每个 CPU 的缓存大小。

  6. 显示 CPU 支持的特性:

    使用 grep 命令可以筛选 CPU 支持的特性:

    bash 复制代码
    grep "flags" /proc/cpuinfo

    这将显示每个 CPU 支持的特性,如 SSE、SSE2、AVX 等。

  7. 显示 CPU 架构:

    使用 grep 命令可以筛选 CPU 的架构信息:

    bash 复制代码
    grep "arch" /proc/cpuinfo

    这将显示每个 CPU 的架构,如 x86_64。

  8. 显示 CPU 是否支持虚拟化:

    使用 grep 命令可以查看 CPU 是否支持虚拟化:

    bash 复制代码
    grep "vmx" /proc/cpuinfo

    如果输出中包含 "vmx",则表示 CPU 支持虚拟化。

这些是 /proc/cpuinfo 文件的一些常见用法,可以根据具体需求筛选和显示所需的信息。

lscpu 是一个用于显示有关 CPU 架构信息的命令。以下是一些常见用法:

  1. 查看 CPU 信息:

    bash 复制代码
    lscpu

    这将显示有关 CPU 的详细信息,包括架构、型号、速度、缓存、核心数等。

  2. 显示 CPU 架构:

    bash 复制代码
    lscpu | grep "Architecture"

    这将仅显示 CPU 的架构信息,如 x86_64。

  3. 显示 CPU 型号和速度:

    bash 复制代码
    lscpu | grep "Model name"
    lscpu | grep "CPU MHz"

    这将显示 CPU 的型号和速度信息。

  4. 显示 CPU 缓存信息:

    bash 复制代码
    lscpu | grep "L3 cache"

    这将显示 CPU 的 L3 缓存大小。

  5. 显示 CPU 核心数:

    bash 复制代码
    lscpu | grep "Core(s) per socket"

    这将显示每个 CPU 插槽的核心数。

  6. 显示 CPU 线程数(逻辑核数):

    bash 复制代码
    lscpu | grep "Thread(s) per core"

    这将显示每个核心的线程数,也即逻辑核数。

  7. 显示 CPU 插槽数:

    bash 复制代码
    lscpu | grep "Socket(s)"

    这将显示系统中的 CPU 插槽数。

  8. 显示 NUMA 节点数:

    bash 复制代码
    lscpu | grep "NUMA node(s)"

    这将显示系统中的 NUMA 节点数。

  9. 显示 CPU 是否支持虚拟化:

    bash 复制代码
    lscpu | grep "Virtualization"

    这将显示 CPU 是否支持虚拟化。

  10. 显示 CPU 支持的指令集:

    bash 复制代码
    lscpu | grep "Flags"

    这将显示 CPU 支持的指令集,如 SSE、SSE2、AVX 等。

这些是 lscpu 命令的一些常见用法,你可以根据具体需求选择查看所需的信息。

事件剖析(perf、execsnoop)

perf 是 Linux 系统中性能分析的工具,用于收集性能事件和生成性能分析报告。以下是一些常见用法:

  1. 收集系统性能事件:

    bash 复制代码
    perf record -a -g -- sleep 5

    这将在系统上运行 sleep 命令 5 秒钟,期间收集所有进程的性能事件。-g 选项会同时收集调用图。

  2. 查看性能报告:

    bash 复制代码
    perf report

    这将生成一个性能报告,显示系统上收集到的性能事件信息。你可以使用箭头键和回车键来浏览报告。

  3. 显示系统的 CPU 周期:

    bash 复制代码
    perf stat sleep 1

    这将运行 sleep 命令 1 秒,并显示系统的 CPU 周期统计信息。

  4. 显示某个命令的性能统计:

    bash 复制代码
    perf stat <command>

    用你想要分析性能的具体命令替代 <command>,这将显示该命令的性能统计信息。

  5. 查看 CPU 指令:

    bash 复制代码
    perf record -e instructions -c 10000 -a

    这将收集所有进程的指令计数事件,每隔 10000 个事件报告一次。

  6. 查看缓存命中率:

    bash 复制代码
    perf stat -e cache-references,cache-misses <command>

    这将运行 <command> 命令并显示缓存引用和缓存失效的统计信息。

  7. 记录 CPU 周期计数:

    bash 复制代码
    perf record -e cycles -a

    这将收集所有进程的 CPU 周期计数信息。

  8. 显示函数调用图:

    bash 复制代码
    perf record -g -p <PID>

    这将在指定的进程上启动性能事件收集,并包括函数调用图。

  9. 显示指定进程的性能信息:

    bash 复制代码
    perf top -p <PID>

    这将显示指定进程的实时性能信息,类似于 top 命令。

  10. 生成火焰图:

    bash 复制代码
    perf script | stackcollapse-perf.pl | flamegraph.pl > flamegraph.svg

    这将生成火焰图,用于可视化系统中的函数调用情况。

这些只是 perf 工具的一些基本用法,你可以根据具体的需求和关注点选择不同的性能事件进行分析。

execsnoopsysdig 工具的一部分,用于跟踪系统上的进程启动事件。以下是一些常见用法:

  1. 基本用法:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve

    这将实时显示执行 execve 系统调用的进程信息,包括用户名、进程 ID、进程名和事件类型。

  2. 按用户名过滤:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and user.name=your_username

    用你的用户名替代 your_username,这样可以只显示特定用户的进程启动信息。

  3. 按进程名过滤:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and proc.name=your_process

    用你的进程名替代 your_process,这样可以只显示特定进程的启动信息。

  4. 按进程 ID 过滤:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and proc.pid=your_pid

    用你的进程 ID 替代 your_pid,这样可以只显示特定进程的启动信息。

  5. 输出到文件:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve > execsnoop.log

    这将将输出重定向到文件,以便稍后分析。

  6. 按照时间戳排序:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve | sort -k1

    这将按照时间戳排序输出。

  7. 显示执行命令的完整路径:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type %proc.args" evt.type=execve

    这将显示执行命令的完整路径。

请注意,使用 sysdig 工具需要系统具有相应的权限。在上述命令中,sudo 用于获取必要的权限。确保在使用此工具时谨慎操作,以免产生不必要的风险。execsnoopsysdig 工具的一部分,用于跟踪系统上的进程启动事件。以下是一些常见用法:

  1. 基本用法:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve

    这将实时显示执行 execve 系统调用的进程信息,包括用户名、进程 ID、进程名和事件类型。

  2. 按用户名过滤:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and user.name=your_username

    用你的用户名替代 your_username,这样可以只显示特定用户的进程启动信息。

  3. 按进程名过滤:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and proc.name=your_process

    用你的进程名替代 your_process,这样可以只显示特定进程的启动信息。

  4. 按进程 ID 过滤:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and proc.pid=your_pid

    用你的进程 ID 替代 your_pid,这样可以只显示特定进程的启动信息。

  5. 输出到文件:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve > execsnoop.log

    这将将输出重定向到文件,以便稍后分析。

  6. 按照时间戳排序:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve | sort -k1

    这将按照时间戳排序输出。

  7. 显示执行命令的完整路径:

    bash 复制代码
    sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type %proc.args" evt.type=execve

    这将显示执行命令的完整路径。

请注意,使用 sysdig 工具需要系统具有相应的权限。在上述命令中,sudo 用于获取必要的权限。确保在使用此工具时谨慎操作,以免产生不必要的风险。

相关推荐
杜杜的man28 分钟前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*29 分钟前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
llllinuuu31 分钟前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s31 分钟前
Golang--协程和管道
开发语言·后端·golang
为什么这亚子34 分钟前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
想进大厂的小王1 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
孤客网络科技工作室1 小时前
VMware 虚拟机使用教程及 Kali Linux 安装指南
linux·虚拟机·kali linux
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea
2402_857589361 小时前
SpringBoot框架:作业管理技术新解
java·spring boot·后端
一只爱打拳的程序猿2 小时前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring