面试官提问:Linux 系统故障时,你会用哪些工具排查?

系统 Linux
你当前的系统状态非常良好,CPU 负载轻,I/O 等待时间短,无需额外优化。如果某个 CPU 核心的负载过高或 %iowait 增加,可能需要进一步分析具体的进程或任务。

引言

正如标题所言:如果面试官问你,如果在 Linux 中系统出现了问题,你会使用哪些工具排查呢?

那就把下面的三分之一记住就足够了,如果面试官不服气,那就把下面所有的都给他说一遍,让他哑口无言。

开始

简介

性能分析

• top: 实时显示系统的 CPU、内存使用情况,以及各个进程的资源消耗。

• htop: top 命令的增强版,界面更友好,支持鼠标操作,可以更加方便地查看和管理进程。

• mpstat: 显示各个 CPU 核心的使用情况,分析多核系统中的 CPU 负载。

• sar: 系统活动报告工具,可以监控 CPU、内存、I/O 等系统资源的使用情况。它可以在长时间内进行系统性能的数据采集。

• vmstat: 查看 CPU、内存、交换分区的性能,能够检测 CPU 的等待时间和系统瓶颈。

内存性能分析

• free: 显示系统当前的内存和交换分区使用情况。

• vmstat: 显示内存、进程、I/O 系统的性能状态。可以帮助分析内存的使用情况。

• smem: 详细列出每个进程的内存消耗情况。

• top / htop: 可以查看每个进程的内存使用情况。

• slabtop: 显示内核 slab 缓存的使用情况,有助于了解内存中缓存数据块的分布。

磁盘性能分析

• iostat: 显示磁盘 I/O 的性能统计信息,尤其是在分析磁盘读写性能时非常有用。

• iotop: 类似于 top,但专注于磁盘 I/O,能够按进程显示实时 I/O 活动。

• df: 显示文件系统的磁盘使用情况。

• du: 显示文件或目录的磁盘空间使用情况。

• lsblk: 列出所有存储设备和分区信息。

• blktrace: 对块设备进行详细的 I/O 跟踪分析。

网络性能分析

• ifconfig / ip: 显示和配置网络接口的信息。

• netstat: 查看网络连接、路由表、接口状态、协议统计等。

• ss: 替代 netstat 的工具,功能更强大,速度更快,分析网络连接和套接字。

• iftop: 实时监控网络带宽使用情况,显示每个网络连接的实时流量。

• nload: 实时查看网络流量的工具,能够显示出入口和出口的带宽使用情况。

• ping: 测试与远程主机的网络连通性,测量网络延迟。

• traceroute: 查看数据包从本地主机到目标主机经过的路由信息。

• tcpdump: 强大的网络抓包工具,能够捕获和分析网络数据包。

• nmap: 网络扫描工具,检查开放端口、主机发现和网络服务。

进程管理

• ps: 列出当前正在运行的进程。

• top / htop: 查看实时进程资源消耗情况。

• pstree: 以树形结构展示进程关系。

• kill: 终止特定的进程。

• strace: 跟踪系统调用和信号,分析进程执行的系统调用,非常适合调试和跟踪进程的运行状态。

综合性能分析

• dstat: 结合 vmstat、iostat、netstat 等工具的功能,实时显示 CPU、内存、磁盘 I/O、网络等资源的使用情况。

• perf: 内核提供的强大性能分析工具,支持采样、跟踪和性能分析,适合开发人员和高级用户进行深入的性能调优。

• sar: 系统监控和报告工具,可以详细记录 CPU、内存、网络、I/O 等各方面的性能。

• sysstat: 包含 iostat、mpstat、sar 等多种工具的综合工具包。

• glances: 类似于 htop 和 dstat 的结合,实时监控 CPU、内存、磁盘、网络、进程等多项系统性能指标。

最佳实践

一、性能分析

1. top

• 用途: 实时监控 CPU、内存及进程资源消耗。

• 快捷键:

a:按 CPU 使用率排序。

b:按内存使用率排序。

c :退出。

• 示例:

top -c  # 显示完整进程命令行

2. htop (需安装)

• 用途: 增强版 top,支持鼠标操作、多核负载可视化。

• 安装:

sudo apt install htop  # Debian/Ubuntu

• 示例:

htop  # 查看线程级 CPU 使用
3. mpstat (需安装 sysstat )

• 用途: 监控多核 CPU 各核心利用率。

• 示例:

mpstat -P ALL 1  # 每秒刷新所有核心状态
4. perf

• 用途: 深入分析 CPU 性能事件(如函数热点、缓存命中率)。

• 示例:

perf top       # 实时查看 CPU 热点
perf record -g # 生成火焰图数据
5. sar(需安装 sysstat)

• 用途: 长期记录 CPU 使用率、上下文切换等。

• 示例:

sar -u 1 5  # 查看过去 5 秒 CPU 使用率

二、内存性能分析

1. free

• 用途: 快速查看内存和 Swap 使用量。

• 示例:

free -h  # 以 GB/MB 显示
2. vmstat

• 用途: 综合监控内存、Swap、进程队列和 I/O。

• 示例:

vmstat 1  # 每秒刷新一次
3. smem(需安装)

• 用途: 按进程统计实际物理内存占用(USS/PSS/RSS)。

• 安装:

sudo apt install smem  # Debian/Ubuntu

• 示例:

smem -u  # 按用户统计内存
4. slabtop

• 用途: 分析内核 Slab 缓存(内核对象占用内存)。

• 示例:

slabtop -s c  # 按缓存大小排序

三、磁盘性能分析

1. iostat(需安装 sysstat)

• 用途: 监控磁盘吞吐量、延迟和利用率。

• 示例:

iostat -xz 1  # 查看详细 I/O 统计
2. iotop(需安装)

• 用途: 按进程实时显示磁盘 I/O 活动。

• 安装:

sudo apt install iotop  # Debian/Ubuntu

• 示例:

iotop -o  # 仅显示活跃 I/O 进程
3. blktrace(需安装)

• 用途: 深度跟踪块设备 I/O 请求(调试磁盘性能瓶颈)。

• 示例:

blktrace -d /dev/sda -o trace  # 跟踪 sda 设备

四、网络性能分析

1. iftop(需安装)

• 用途: 实时监控网络连接带宽。

• 示例:

sudo iftop -i eth0  # 指定网卡监控
2. nethogs(需安装)

• 用途: 按进程统计网络流量。

• 示例:

nethogs eth0  # 查看指定网卡流量
3. ss

• 用途: 替代 netstat,快速查看连接和端口状态。

• 示例:

ss -tunlp  # 显示所有 TCP/UDP 连接及进程
4. tcpdump

• 用途: 抓包分析网络流量(需 root 权限)。

• 示例:

tcpdump -i eth0 port 80  # 抓取 HTTP 流量

五、进程级分析

1. pidstat(需安装 sysstat )

• 用途: 监控进程的 CPU、内存、I/O。

• 示例:

pidstat -d -p 1234 1  # 监控 PID 1234 的磁盘 I/O
2. strace

• 用途: 跟踪进程的系统调用和信号。

• 示例:

strace -p 1234 -T  # 跟踪 PID 1234 的调用耗时

六、综合工具与场景指南

1. 一站式监控工具

• glances(需安装)

glances  # 实时监控 CPU、内存、磁盘、网络

• dstat(需安装)

dstat -c -m -d -n  # 综合显示 CPU、内存、磁盘、网络
2. 高频场景速查

• 系统卡顿:

top → vmstat 1 → iostat 1 → pidstat 1  # 逐层定位瓶颈

• 网络延迟:

ping 8.8.8.8 → traceroute google.com → tcpdump -i eth0  # 逐步排查

• 进程异常:

strace -p <PID> → perf record -g -p <PID>  # 分析系统调用和 CPU 热点
3. 实用组合命令

• 查找 CPU/内存占用 Top 进程:

ps aux --sort=-%cpu | head -10  # Top 10 CPU 进程
ps aux --sort=-%mem | head -10  # Top 10 内存进程

• 持续监控磁盘空间:

watch -n 1 'df -h'  # 每秒刷新磁盘使用

七、使用场景总结

• 系统变慢: 先用 top 或 htop 查看整体负载,再用 vmstat/iostat 定位 CPU、磁盘或内存瓶颈。

• 网络延迟: iftop 或 nethogs 查看流量,tcpdump 抓包分析。

• 进程卡死: strace 跟踪系统调用,perf 分析 CPU 热点。

实际案例解说

这边选择几个有代表性的把参数详细聊聊。

图片

vmstat 命令显示了 系统资源的实时状态,帮助你监控 CPU、内存、IO、进程等资源的使用情况。

(进程相关)

• r: 运行队列中等待 CPU 的进程数。如果这个数值大于 CPU 核心数量,说明系统 CPU 资源不足。

• b: 不可中断睡眠的进程数(一般是等待 I/O 的进程)。

(内存相关)

• swpd: 使用的 swap 空间(单位:KB)。如果非 0,表示系统已经在使用 swap 分区,可能会影响性能。

• free: 空闲内存(单位:KB)。

• buff: 用于缓冲区的内存(单位:KB),用于存储文件系统的元数据。

• cache: 用于缓存的内存(单位:KB),加速数据读取。如果缓存命中率高,会减少 I/O 压力。

(交换分区相关)

• si(swap in): 从 swap 分区交换到内存的大小(单位:KB/秒)。

• so(swap out): 从内存交换到 swap 分区的大小(单位:KB/秒)。

• 如果 si 和 so 值较大,说明系统内存不足,需要频繁使用 swap,这会降低性能。

(相关)

• bi(block in): 从块设备(如磁盘)读取的数据量(单位:块/秒)。

• bo(block out): 写入块设备(如磁盘)的数据量(单位:块/秒)。

• 这两个值高时,说明磁盘 I/O 活动频繁,可能会成为系统瓶颈。

(系统相关)

• in: 每秒中断次数,包括硬件和系统时钟中断。

• cs(context switches): 每秒上下文切换次数。上下文切换多说明进程频繁切换,可能影响性能。

(相关)

• us(user time): CPU 花费在用户进程上的时间百分比。用户进程是指非内核的应用程序。

• sy(system time): CPU 花费在系统内核进程上的时间百分比。

• id(idle time): CPU 的空闲时间百分比。如果值很高,说明 CPU 比较空闲。

• wa(wait time): CPU 等待 I/O 的时间百分比。如果值高,说明 I/O 成为系统瓶颈。

• st(steal time): 虚拟机中,CPU 被其他虚拟机占用的时间百分比。如果值高,说明虚拟化资源不足。

如何分析图中的数据:

• r 为 0: 没有等待 CPU 的进程,CPU 资源充足。

• id 高达 98-97%: CPU 基本处于空闲状态,系统负载很低。

• wa 为 0%: 没有 CPU 等待 I/O,I/O 性能正常。

• si 和 so 为 0: 系统没有使用 swap,内存充足。

• bi 和 bo 较低: 磁盘 I/O 压力不大。

总结:

从截图来看,系统整体运行状态非常良好:

• CPU 基本处于空闲状态(id 很高)。

• 没有使用 swap(swpd、si、so 都是 0)。

• 没有等待 CPU 或 I/O 的进程(r、b 和 wa 都接近 0)。

这表明当前系统负载很低,没有出现任何性能瓶颈。

图片图片

你的截图显示了 iostat -d 3 命令的输出,它展示了 磁盘设备的性能数据。

iostat -d 3 输出字段解释

1. Device:

• 显示监控的磁盘设备名称(如 vda 和 vdb)。

• 这些是块设备,如虚拟机中的磁盘、物理磁盘或分区。

2. tps(Transactions per Second):

• 每秒对该设备发起的 I/O 请求数(读或写)。

• 这个值越高,说明设备的 I/O 活动越频繁。

3. kB_read/s:

• 每秒从设备读取的 数据量(单位:KB)。

• 如果这个值持续较高,说明系统在频繁读取数据。

4. kB_wrtn/s:

• 每秒写入设备的 数据量(单位:KB)。

• 如果写入数据量较高,说明系统在频繁写数据到磁盘。

5. kB_dscd/s(discarded data per second):

• 每秒丢弃的数据量(单位:KB)。通常用于监控 SSD 设备的 TRIM 操作。

• 在你的输出中,该值为 0,说明当前没有丢弃操作。

6. kB_read:

• 从启动以来总共读取的数据量(单位:KB)。

7. kB_wrtn:

• 从启动以来总共写入的数据量(单位:KB)。

8. kB_dscd:

• 从启动以来总共丢弃的数据量(单位:KB)。在你截图中为 0。

分析你的输出

• vda 设备:

• tps:3.74,每秒有 3.74 个 I/O 操作。

• 读取速率:每秒读取 0.52 KB。

• 写入速率:每秒写入 65.88 KB。

• 说明:vda 设备的写入操作较为频繁,性能上主要是写密集型。

• vdb 设备:

• tps:0.10,每秒只有 0.10 个 I/O 操作。

• 读取和写入速率:读取和写入数据量都很小(约 0.52 KB 和 2.10 KB/s)。

• 说明:vdb 设备 I/O 活动较少,读写需求不高。

如何解读这些数据

1. I/O 活动:

• vda 设备 I/O 活动相对较高,且主要以写操作为主(每秒写入 65.88 KB)。

• vdb 活动非常少,基本没有大量的读写需求。

2. 性能分析:

• 如果写入操作频繁且 I/O 性能出现瓶颈(如 tps 和 kB_wrtn/s 高得离谱),可能需要检查设备是否需要优化或扩展。

• 如果读取较慢,可能需要检查是否有必要优化缓存。

总结

• vda 设备 主要是写操作频繁,需要密切监控写入性能。

• vdb 设备 活动很少,没有明显的性能压力。

你可以继续使用 iostat 命令来实时监控设备的 I/O 性能,并观察这些值是否在高峰期发生显著变化。如有必要,也可以结合 iotop 或 dstat 等工具进行进一步分析。

图片图片

该命令显示 每个 CPU 核心 的详细使用情况,并每 3 秒更新一次。

字段解释:

1. CPU:

• 显示是哪一个 CPU 核心。

• all 表示所有 CPU 核心的平均值。

• 接下来的每一行代表一个具体的 CPU 核心(例如 0 到 7 代表系统中的 8 个核心)。

2. %usr(User Time):

• 用户进程消耗的 CPU 百分比(不包括内核进程)。

• 这个值较高时,说明系统在运行大量的用户级应用程序。

3. %nice(Nice Time):

• 被调整优先级(nice 级别)的进程消耗的 CPU 百分比。

• 如果有低优先级任务占用大量 CPU 时间,这个值会增加。

4. %sys(System Time):

• 内核进程消耗的 CPU 百分比。

• 如果这个值较高,说明内核级的任务或 I/O 操作占用了大量 CPU 时间。

5. %iowait(I/O Wait):

• CPU 等待 I/O 操作完成的时间百分比。

• 如果这个值较高,说明 CPU 大量时间被耗费在等待磁盘或网络 I/O 上。

6. %irq(Interrupt Requests):

• CPU 处理硬件中断(IRQ)请求的时间百分比。

• 高值表明系统中有频繁的硬件中断(如网络或磁盘活动)。

7. %soft(Soft IRQs):

• 软中断占用的 CPU 时间百分比。

• 软中断多与网络或驱动程序相关。

8. %steal(Steal Time):

• 在虚拟化环境中,CPU 被其他虚拟机占用的时间百分比。

• 如果值较高,说明虚拟机没有获得足够的 CPU 资源。

9. %guest(Guest Time):

• CPU 用于运行虚拟机内进程的时间百分比。

10. %gnice(Guest Nice Time):

• 虚拟机中被调整了优先级的进程消耗的时间。

11. %idle(Idle Time):

• CPU 空闲的时间百分比。

• 如果该值高,说明系统比较空闲;如果低,说明 CPU 资源繁忙。

分析你的输出:

1. 所有 CPU 核心的平均情况(all 行):

• %usr: 2.59%——用户进程占用少量 CPU 时间。

• %sys: 2.30%——内核进程也占用了一些时间。

• %iowait: 0.17%——CPU 花在等待 I/O 的时间很少。

• %idle: 94.95%——整体来看,CPU 大部分时间处于空闲状态。

2. 各个 CPU 核心的情况:

• CPU 6: %usr 为 7.33%,CPU 活动稍高。

• 其余核心: 大部分核心的 %idle 在 90% 以上,表明它们大部分时间处于空闲状态。

结论:

• 系统整体负载较低,因为所有 CPU 的空闲时间 %idle 都很高(94% 以上)。

• CPU 6 相较于其他核心稍微活跃,但没有出现过高的负载,说明系统没有性能瓶颈。

• I/O 等待时间 %iowait 很低(0.17%),说明磁盘和网络 I/O 不存在明显的瓶颈。

你当前的系统状态非常良好,CPU 负载轻,I/O 等待时间短,无需额外优化。如果某个 CPU 核心的负载过高或 %iowait 增加,可能需要进一步分析具体的进程或任务。

责任编辑:武晓燕 来源: 云原生运维圈
相关推荐

2014-05-09 14:33:35

2013-04-10 13:52:23

2020-08-17 07:40:19

消息队列

2023-02-16 08:10:40

死锁线程

2022-09-29 07:30:57

数据库索引字段

2021-12-08 06:53:29

面试动态代理

2018-11-26 08:40:43

2024-11-14 09:29:38

2013-05-16 09:11:15

系统故障故障排查

2015-08-13 10:29:12

面试面试官

2024-07-23 08:21:19

2024-07-26 08:10:10

2023-02-20 08:08:48

限流算法计数器算法令牌桶算法

2021-05-11 09:20:38

Webpack工具模块

2024-05-11 15:11:44

系统软件部署

2024-07-26 08:47:07

2021-08-20 08:33:19

操作系统OS

2010-08-27 10:53:14

面试

2020-08-06 07:49:57

List元素集合

2019-08-19 14:51:56

Linux 系统 数据
点赞
收藏

51CTO技术栈公众号