cpu相关指标(top、uptime、vmstat、mpstat、sar、pidstat、ps、dstat、perf、tcpdump、lscpu)等常见使用方法(二)https://developer.aliyun.com/article/1474368
网络(dstat、sar、tcpdump)
dstat
是一个用于实时监控系统资源使用情况的工具,它可以提供关于 CPU、内存、磁盘、网络等方面的详细统计信息。以下是 dstat
的一些常用用法:
- 基本用法:
最简单的使用方法是在终端中直接运行dstat
命令:
dstat • 1
- 这将显示默认情况下的一些基本性能统计信息,包括 CPU 使用率、内存使用率、磁盘 I/O 等。
- 指定显示内容:
使用-c
、-m
、-d
等选项可以指定要显示的内容。例如,显示 CPU 使用率和内存使用情况:
dstat -c -m • 1
- 实时更新间隔:
使用-t
选项可以指定dstat
的刷新间隔,单位为秒。例如,每隔 2 秒更新一次:
dstat -t 2 • 1
- 显示网络信息:
使用-n
选项可以显示网络相关的统计信息:
dstat -n • 1
- 显示磁盘信息:
使用-d
选项可以显示磁盘 I/O 相关的信息:
dstat -d • 1
- 显示系统信息:
使用-s
选项可以显示系统相关的信息,包括系统调用、中断等:
dstat -s • 1
- 显示进程信息:
使用-p
选项可以显示进程相关的信息,包括进程 CPU、内存占用等:
dstat -p • 1
- 保存输出到文件:
使用--output
选项可以将dstat
的输出保存到文件中,以便后续分析:
dstat --output dstat_output.csv • 1
- 这将把输出保存到
dstat_output.csv
文件中。 - 显示颜色化输出:
使用--color
选项可以启用颜色化的输出,提高可读性:
dstat --color • 1
- 颜色化输出将以不同颜色区分不同的统计信息。
- 显示帮助信息:
如果需要查看更多选项和用法,可以使用--help
选项:
dstat --help • 1
dstat
提供了丰富的选项和灵活的配置,可以根据需要监控系统的不同方面。在使用时,可以根据具体的需求选择合适的选项组合。
tcpdump
是一个网络抓包工具,用于捕获和分析网络数据包。以下是一些常见的 tcpdump
用法和选项:
- 基本用法:
最简单的tcpdump
命令用法是:
tcpdump • 1
- 这将捕获系统上的所有网络接口的数据包。
- 指定网络接口:
使用-i
选项可以指定要监听的网络接口。例如,监听eth0
接口:
tcpdump -i eth0 • 1
- 过滤特定主机或网络:
使用过滤器可以限制捕获的数据包。例如,只捕获源或目标是特定 IP 地址的数据包:
tcpdump host 192.168.1.1 • 1
- 或者只捕获特定网络的数据包:
tcpdump net 192.168.1.0/24 • 1
- 保存到文件:
使用-w
选项可以将捕获的数据包保存到文件中:
tcpdump -w capture.pcap • 1
- 这将把捕获的数据包保存到
capture.pcap
文件中,后续可以使用其他工具进行分析。 - 读取保存的文件:
使用-r
选项可以读取之前保存的数据包文件:
tcpdump -r capture.pcap • 1
- 指定端口:
使用port
关键字可以捕获特定端口的数据包:
tcpdump port 80 • 1
- 这将捕获目标或源端口是 80 的数据包。
- 显示更多详细信息:
使用-v
、-vv
或-vvv
选项可以增加详细程度,显示更多的信息:
tcpdump -vv • 1
- 显示 ASCII 数据:
使用-A
选项可以显示捕获的数据包的 ASCII 数据:
tcpdump -A • 1
- 显示时间戳:
使用-t
选项可以显示每个数据包的时间戳:
tcpdump -t • 1
- 显示端口号对应的服务名称:
使用-n
选项可以防止tcpdump
尝试将端口号转换为服务名称:
tcpdump -n • 1
- 显示 ICMP 报文:
使用icmp
关键字可以捕获 ICMP 报文:
tcpdump icmp • 1
- 显示特定协议:
使用proto
关键字可以捕获特定协议的数据包。例如,只显示 TCP 数据包:
tcpdump proto tcp • 1
- 或只显示 UDP 数据包:
tcpdump proto udp • 1
这只是 tcpdump
的一些常见用法,该工具提供了丰富的选项和过滤器,可以根据需要进行更复杂的网络数据包分析。
I/O(dstat、sar)
CPU个数(/proc/cpuinfo、lscpu)
/proc/cpuinfo
文件包含有关系统上的每个 CPU 的信息。以下是使用 /proc/cpuinfo
的一些常见用法:
- 查看 CPU 信息:
使用cat
命令可以查看整个/proc/cpuinfo
文件的内容:
cat /proc/cpuinfo • 1
- 这将显示有关每个 CPU 的详细信息,包括型号、速度、缓存等。
- 显示 CPU 的物理核数:
使用grep
命令可以筛选物理核心的数量:
grep "physical id" /proc/cpuinfo | sort -u | wc -l • 1
- 这将显示系统中的物理 CPU 数量。
- 显示 CPU 的逻辑核数:
使用grep
命令可以筛选逻辑核心的数量:
grep "processor" /proc/cpuinfo | wc -l • 1
- 这将显示系统中的逻辑 CPU 数量。
- 显示 CPU 的型号和速度:
使用grep
命令可以筛选 CPU 的型号和速度信息:
grep "model name" /proc/cpuinfo grep "cpu MHz" /proc/cpuinfo • 1 • 2
- 这将显示每个 CPU 的型号和速度。
- 显示 CPU 缓存信息:
使用grep
命令可以筛选 CPU 缓存信息:
grep "cache size" /proc/cpuinfo • 1
- 这将显示每个 CPU 的缓存大小。
- 显示 CPU 支持的特性:
使用grep
命令可以筛选 CPU 支持的特性:
grep "flags" /proc/cpuinfo • 1
- 这将显示每个 CPU 支持的特性,如 SSE、SSE2、AVX 等。
- 显示 CPU 架构:
使用grep
命令可以筛选 CPU 的架构信息:
grep "arch" /proc/cpuinfo • 1
- 这将显示每个 CPU 的架构,如 x86_64。
- 显示 CPU 是否支持虚拟化:
使用grep
命令可以查看 CPU 是否支持虚拟化:
grep "vmx" /proc/cpuinfo • 1
- 如果输出中包含 “vmx”,则表示 CPU 支持虚拟化。
这些是 /proc/cpuinfo
文件的一些常见用法,可以根据具体需求筛选和显示所需的信息。
lscpu
是一个用于显示有关 CPU 架构信息的命令。以下是一些常见用法:
- 查看 CPU 信息:
lscpu • 1
- 这将显示有关 CPU 的详细信息,包括架构、型号、速度、缓存、核心数等。
- 显示 CPU 架构:
lscpu | grep "Architecture" • 1
- 这将仅显示 CPU 的架构信息,如 x86_64。
- 显示 CPU 型号和速度:
lscpu | grep "Model name" lscpu | grep "CPU MHz" • 1 • 2
- 这将显示 CPU 的型号和速度信息。
- 显示 CPU 缓存信息:
lscpu | grep "L3 cache" • 1
- 这将显示 CPU 的 L3 缓存大小。
- 显示 CPU 核心数:
lscpu | grep "Core(s) per socket" • 1
- 这将显示每个 CPU 插槽的核心数。
- 显示 CPU 线程数(逻辑核数):
lscpu | grep "Thread(s) per core" • 1
- 这将显示每个核心的线程数,也即逻辑核数。
- 显示 CPU 插槽数:
lscpu | grep "Socket(s)" • 1
- 这将显示系统中的 CPU 插槽数。
- 显示 NUMA 节点数:
lscpu | grep "NUMA node(s)" • 1
- 这将显示系统中的 NUMA 节点数。
- 显示 CPU 是否支持虚拟化:
lscpu | grep "Virtualization" • 1
- 这将显示 CPU 是否支持虚拟化。
- 显示 CPU 支持的指令集:
lscpu | grep "Flags" • 1
- 这将显示 CPU 支持的指令集,如 SSE、SSE2、AVX 等。
这些是 lscpu
命令的一些常见用法,你可以根据具体需求选择查看所需的信息。
事件剖析(perf、execsnoop)
perf
是 Linux 系统中性能分析的工具,用于收集性能事件和生成性能分析报告。以下是一些常见用法:
- 收集系统性能事件:
perf record -a -g -- sleep 5 • 1
- 这将在系统上运行
sleep
命令 5 秒钟,期间收集所有进程的性能事件。-g
选项会同时收集调用图。 - 查看性能报告:
perf report • 1
- 这将生成一个性能报告,显示系统上收集到的性能事件信息。你可以使用箭头键和回车键来浏览报告。
- 显示系统的 CPU 周期:
perf stat sleep 1 • 1
- 这将运行
sleep
命令 1 秒,并显示系统的 CPU 周期统计信息。 - 显示某个命令的性能统计:
perf stat <command> • 1
- 用你想要分析性能的具体命令替代
<command>
,这将显示该命令的性能统计信息。 - 查看 CPU 指令:
perf record -e instructions -c 10000 -a • 1
- 这将收集所有进程的指令计数事件,每隔 10000 个事件报告一次。
- 查看缓存命中率:
perf stat -e cache-references,cache-misses <command> • 1
- 这将运行
<command>
命令并显示缓存引用和缓存失效的统计信息。 - 记录 CPU 周期计数:
perf record -e cycles -a • 1
- 这将收集所有进程的 CPU 周期计数信息。
- 显示函数调用图:
perf record -g -p <PID> • 1
- 这将在指定的进程上启动性能事件收集,并包括函数调用图。
- 显示指定进程的性能信息:
perf top -p <PID> • 1
- 这将显示指定进程的实时性能信息,类似于
top
命令。 - 生成火焰图:
perf script | stackcollapse-perf.pl | flamegraph.pl > flamegraph.svg • 1
- 这将生成火焰图,用于可视化系统中的函数调用情况。
这些只是 perf
工具的一些基本用法,你可以根据具体的需求和关注点选择不同的性能事件进行分析。
execsnoop
是 sysdig
工具的一部分,用于跟踪系统上的进程启动事件。以下是一些常见用法:
- 基本用法:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve • 1
- 这将实时显示执行
execve
系统调用的进程信息,包括用户名、进程 ID、进程名和事件类型。 - 按用户名过滤:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and user.name=your_username • 1
- 用你的用户名替代
your_username
,这样可以只显示特定用户的进程启动信息。 - 按进程名过滤:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and proc.name=your_process • 1
- 用你的进程名替代
your_process
,这样可以只显示特定进程的启动信息。 - 按进程 ID 过滤:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and proc.pid=your_pid • 1
- 用你的进程 ID 替代
your_pid
,这样可以只显示特定进程的启动信息。 - 输出到文件:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve > execsnoop.log • 1
- 这将将输出重定向到文件,以便稍后分析。
- 按照时间戳排序:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve | sort -k1 • 1
- 这将按照时间戳排序输出。
- 显示执行命令的完整路径:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type %proc.args" evt.type=execve • 1
- 这将显示执行命令的完整路径。
请注意,使用 sysdig
工具需要系统具有相应的权限。在上述命令中,sudo
用于获取必要的权限。确保在使用此工具时谨慎操作,以免产生不必要的风险。execsnoop
是 sysdig
工具的一部分,用于跟踪系统上的进程启动事件。以下是一些常见用法:
- 基本用法:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve • 1
- 这将实时显示执行
execve
系统调用的进程信息,包括用户名、进程 ID、进程名和事件类型。 - 按用户名过滤:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and user.name=your_username • 1
- 用你的用户名替代
your_username
,这样可以只显示特定用户的进程启动信息。 - 按进程名过滤:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and proc.name=your_process • 1
- 用你的进程名替代
your_process
,这样可以只显示特定进程的启动信息。 - 按进程 ID 过滤:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve and proc.pid=your_pid • 1
- 用你的进程 ID 替代
your_pid
,这样可以只显示特定进程的启动信息。 - 输出到文件:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve > execsnoop.log • 1
- 这将将输出重定向到文件,以便稍后分析。
- 按照时间戳排序:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type" evt.type=execve | sort -k1 • 1
- 这将按照时间戳排序输出。
- 显示执行命令的完整路径:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3evt.type %proc.args" evt.type=execve • 1
- 这将显示执行命令的完整路径。
请注意,使用 sysdig
工具需要系统具有相应的权限。在上述命令中,sudo
用于获取必要的权限。确保在使用此工具时谨慎操作,以免产生不必要的风险。