Diagnostic Tools

基础

查看cpu:

cat /proc/cpuinfo
lscpu
cpuid

查看系统负载:

uptime

// output: 当前时间,系统运行时间,1、3、15 分钟的平均负载
17:44:09 up  1:58,  3 users,  load average: 0.00, 0.00, 0.00

观察某个命令输出的变化:

watch -d uptime
// -d, --differences 高亮变化的部分

/proc

/proc 是 linux 提供的一种特殊的文件系统,是用户与内核交互的接口。可以从 /proc 中查询运行状态和配置选项,也可以修改 /proc 来修改内核的配置。

/proc/softirqs # 软中断
/proc/interrupts # 硬中断

/proc/stat # CPU 和任务统计信息 
/proc/[pid]/stat # 进程的 CPU 和任务统计信息

/proc/meminfo # 内存信息

/proc/slabinfo # 查看 slab 信息

/proc/zoneinfo # NUMA 架构中每个 node 的信息

/proc/diskstats # 查看磁盘统计信息

ps

线程名字有中括号,表示无法获取它们的命令行参数,一般都是内核线程。

top

常用查看系统负载、进程状态的工具。

S(Status) 列表示进程状态:

  • R:Running or Runnable,正在运行或正在等待运行。

  • D:Disk Sleep,不可中断睡眠(Uninterruptible Sleep),一般表示正在和硬件交互,且交互过程不允许被其它进程中断或打断。

  • Z:Zombie,僵尸进程,进程实际上已经结束,但是父进程还没有回收它的资源。

  • S:Interruptible Sleep,可中断睡眠,进程等待某个事件而被系统挂起,唤醒后会进入 R 状态。

  • I:Idle,空闲状态,不可中断的内核线程。D 会导致平均负载升高,但是 I 不会。

内存相关的列:

  • VIRT:进程的虚拟内存大小。只要申请过,就算没有分配物理内存,也会计算在内。

  • RES:常驻内存大小,实际使用的物理内存,不包括 swap 和共享内存。

  • SHR:共享内存,不一定全部共享,程序代码段、非共享的动态链接库也计算在 SHR 内;不过真正共享的内存,共享的动态链接库自然也计算在内。

  • %MEM:进程使用的物理内存占系统内存的百分比。

sysstat

系统压力测试工具:apt install sysstat

mpstat

CPU 性能分析工具

  • -P ALL,输出所有 CPU 的统计

pidstat

进程性能分析工具

  • -u,输出 CPU 使用率

  • -d,输出 I/O 统计

  • -w,输出任务切换

    • cswch:每秒自愿上下文切换数。进程无法获取资源(IO、内存)导致上下文切换。

    • nvcswch:每秒非自愿上下文切换数。进程的时间片已到,系统强制调度。

  • -p,指定某个进程

sar

系统活动报告工具,可以实时查看系统当前的活动,也可以配置保存和报告历史统计数据。

  • rxpck/s, txpck/s:PPS,包/秒。

  • rxKB/s, txKB/s:吞吐量。

  • rxcmp/s, tcxmp/s:压缩包数据包数。

  • %ifutil:网络接口使用率。半双工模式下为 (rxkB/s+txkB/s)/Bandwidth,而全双工模式下为 max(rxkB/s, txkB/s)/Bandwidth。Bandwidth 可用ethtool 查看。

iostat

数据来自 /proc/diskstats。

  • r/s + w/s 就是 IOPS

  • rKB/s + wKB/s 就是吞吐量

  • r_await + w_await 就是响应时间

饱和度一般无法直接获取,可通过与基础测试结果(fio)比较来评估饱和度。

dstat

新的性能工具,吸收了 vmstat、iostat、ifstat 等工具的优点。

vmstat

系统性能分析工具,主要用于分析系统内存使用情况、CPU 上下文切换、中断次数等。

  • cs(context switch):每秒上下文切换次数。

  • in(interrupt):每秒中断次数。

  • r(runnable):正在运行和等待 CPU 的进程数。

  • b(uninterruptible):不可中断睡眠状态的进程数。

strace

跟踪进程的系统调用。

perf

利用动态追踪技术

  • Overhead: 比例

  • Shard:动态共享对象

  • Object:[.] 表示用户空间可以执行程序,[k] 表示内核空间。

  • Symbol:函数名

还有perf record [-g]perf report [-g] 等。

可以追踪内核线程。可以通过其它工具把输出结果以火焰图的方式展示。

pstree

用树型显示所有进程之间的关系。

pgrep

根据进程名查找进程号。

execsnoop

专为短时进程设计的工具。它通过 ftrace 实时监控进程的 exec() 行为,并输出短时进程的基本信息。

numactl

查看、控制 NUMA 中的 node 信息。

bcc

基于 Linux 内核的 eBPF 机制。

CentOS Install

CentOS 7

升级内核

安装 bcc-tools

cachestat

提供整个操作系统缓存的读写命中情况。

  • TOTAL: 总 IO 次数。一次代表一页,为 4KB。

  • MISSES: 未命中缓存次数

  • HITS: 命中缓存次数

  • DIRTIES: 新增到缓存中的脏页数

  • BUFFERS_MB: Buffer的大小

  • CACHED_MB: Cache 的大小

cachetop

提供每个进程的缓存命中情况。

不会吧 Direct IO 算进来。

memleak

可以跟踪系统或指定进程的内存分配、释放请求,然后定期输出一个未释放内存和相应调用栈的汇总情况。

filetop

跟踪内核中文件的读写情况。

opensnoop

动态跟踪内核中 open 系统调用。

内存相关

free

  • total:

  • used: 包含了共享内存

  • free:

  • shared:

  • buff/cache: 并不是所有的缓存都可以回收。

  • available: 新进程可用的内存大小。不仅包含未使用内存,还包括了可回收的缓存。

slabtop

查看 slab 信息。

pcstat

Go 开发的。查看文件在内存中的缓存大小及缓存比例。

磁盘相关

dd

转换和复制磁盘和文件的工具。

如果把 dd 当做测试文件系统性能的工具,由于缓存的存在,会导致测试结果严重失真。

df

查看文件系统的磁盘使用情况。

iotop

lsof

查看进程打开的文件列表,文件包括普通文件、目录、块设备、动态库、网络套接字等。

网络相关

net-tools

ifconfig

  • RUNNING:同 ip 的 LOWER_UP。

iproute

net-tools 的下一代,建议使用这个。

ip

  • LOWER_UP:物理网络连通,网卡已经连到交换机或路由器。

  • MTU:默认 1500。

  • errors:校验错误、帧同步错误等。

  • dropped:丢弃的数据包数。如内存不足。

  • overruns:超限的数据包数。如网络 IO 过快,Ring Buffer 来不及处理。

  • carrier:发生 carrier 错误的数据包数。如双工模式不匹配、物理电缆出问题等。

  • collisions:碰撞数据包数。

netstat

查看套接字、网络栈、网络接口以及路由表的信息。

ss

与 netstat 类似,但是性能更好。

接收队列(Recv-Q)和发送队列(Send-Q)通常应该是 0。若不是 0 时,说明有网络包的堆积发生。

若 Socket 处于 Established 状态时:

  • Recv-Q:Socket 缓冲区还未被应用程序取走的字节数(接收队列长度)。

  • Send-Q:还未被远端主机确认的字节数(发送队列长度)。

若 Socket 处于 Listen 状态:

  • Recv-Q:全连接队列的长度。

  • Send-Q:全连接队列的最大长度。

全连接指完成了三次 TCP 握手。需要被 accept() 系统调用取走。半连接指还未完成 TCP 三次握手,服务器收到客户端 SYN 后,会把连接放到半连接队列中,再向客户端发送 SYN+ACK。

ethtool

ping

测试主机连通性和延时。

tcpdump

常用的网络抓包工具。基于 libpcap。

基本输出格式:时间戳 协议 源地址.源端口 > 目的地址.目的端口 网络包详细信息。可以通过选项增加其它字段。

Wireshark

抓包和分析工具,提供图形界面和汇总分析工具。

tcpdump 通过 -w 选项保持抓包文件,可通过 wireshark 图形界面打开,以更加友好的方式展示。

比如 Statistics -> Flow Graph 可以查看整个 TCP 的流程。推荐书籍 《Wireshark网络分析就这么简单》、《Wireshark网络分析的艺术》

hping3

可以构造 TCP/IP 协议数据包的工具。

traceroute

bind-utils

nslookup

dig

dig trace 的输出主要有四部分:

  • 一:查到根域名服务器 (.) 的 NS 记录。

  • 二:从 NS 中选一个,查询顶级域名 com. 的 NS 记录。

  • 三:从 com. 的 NS 记录中选一个,查找二级域名 baidu.com. 的 NS 记录。

  • 四:从 baidu.com. 的 NS 记录中选一个,查询 baidu.com. 的 A 记录。

dnsmasq

最常用的 DNS 缓存服务器,还可作为 DHCP 服务器使用。

测试相关

sysbench

多线程基准测试工具。

  • --thread: 线程数

  • --time: 执行多少秒

stress

系统压力测试工具:apt install stress,重要的参数有:

  • -i, --io 模拟 N 个进程执行 sync()

  • -c,--cpu 模拟 N 个进程执行 sqrt()

  • -t,--timeout 执行 N 秒

ab

HTTP 服务性能测试工具。

测试结果分为请求汇总、连接时间汇总、请求延时汇总三部分。

fio

磁盘性能测试工具。

  • slat,从 io 提交到实际执行 io 的时长。

  • clat,从 io 提交到完成 io 的时长。

  • lat,fio 创建 io 到 io 完成的时长。

  • bw,吞吐量。

  • iops,每秒 io 次数。

对于同步 IO,clat = 0;对于异步 IO,lat ≈ slat + clat。

iperf

TCP、UDP 性能测试工具。

SUM 行就是测试汇总结果。包括测试时间、数据传输量、带宽等。又分为 sender 和 receiver 两行。

netperf

TCP、UDP 性能测试工具。

wrk

网络性能测试工具。

Last updated

Was this helpful?