本文档提供了 Linux 和类 Unix 环境中系统调试的命令行工具和技术的全面概述。系统调试包括识别、诊断和故障排除与 CPU、内存、磁盘、网络、进程和整体系统性能相关的问题。重点在于跨各种发行版实用的、基于命令行的调试方法。
有关特定于应用程序的调试或开发调试方法,请参阅命令行工具关系。
来源: README.md312-353
系统调试涉及监视和分析操作系统的不同组件,以识别瓶颈、故障或意外行为。Linux 命令行提供了一套丰富的专用工具,有助于检查系统状态、资源利用率和进程行为。
以下是主要系统调试域及其相应工具的分类
来源: README.md316-322 README.md326-350
这些工具有助于识别性能瓶颈、高 CPU 使用率和内存消耗问题。
| 工具 | 主要目的 | 常见用法 |
|---|---|---|
top | 实时进程查看器 | 通用监视 |
htop | 增强型 top | 更好的可视化和用户界面 |
free | 内存使用 | 检查内存可用性和缓存 |
vmstat | 虚拟内存统计信息 | 内存和 CPU 负载概览 |
mpstat | 多处理器统计 | 每个 CPU 的使用率监视 |
解释 free 的示例输出
来源: README.md316-317 README.md322-323
这些工具有助于诊断磁盘空间问题、I/O 瓶颈和文件系统问题。
| 工具 | 主要目的 | 常见用法 |
|---|---|---|
iostat | I/O 统计信息 | 查看详细的磁盘性能指标 |
iotop | I/O 监视 | 跟踪哪些进程使用最多的 I/O |
ncdu | 磁盘使用情况分析器 | 查找占用磁盘空间的内容 |
df | 磁盘可用空间 | 检查已挂载文件系统的可用空间 |
du | 磁盘使用情况 | 测量目录/文件占用的空间 |
命令示例
iostat -mxz 15 # Show CPU stats and detailed disk stats every 15 seconds
当删除文件后磁盘空间未被释放时,请使用
lsof | grep deleted | grep "filename-of-my-big-file"
来源: README.md316-317 README.md328-329 README.md352-353
来源: README.md318-319 README.md326-334
| 工具 | 主要目的 | 常见用法 |
|---|---|---|
netstat | 网络统计 | 查看所有网络连接 |
ss | 套接字统计 | netstat 的现代替代品 |
iftop | 接口流量 | 监视每个接口的带宽使用情况 |
nethogs | 每个进程的带宽 | 按进程划分的网络流量 |
mtr | 网络路径分析 | 用于故障排除的增强型 traceroute |
wireshark / tshark | 数据包分析 | 详细检查网络流量 |
使用以下命令检查侦听端口
netstat -lntp # For TCP
netstat -lnup # For UDP
ss -plat # Modern alternative for TCP
对于 Web 调试,请使用
curl -I https://example.com # Check headers only
来源: README.md314-315 README.md318-319 README.md330-334
来源: README.md324-327 README.md335-342
| 工具 | 主要目的 | 常见用法 |
|---|---|---|
strace | 系统调用跟踪 | 查看进程对内核发出的调用 |
ltrace | 库调用跟踪 | 监视对库函数的调用 |
ldd | 库依赖 | 检查程序需要的共享库 |
gdb | GNU 调试器 | 连接到正在运行的进程进行调试 |
lsof | 列出打开的文件 | 查看进程打开的文件/套接字 |
命令示例
strace -p <pid> # Attach to a running process
strace -c <command> # Profile system calls made by a command
用于调试的有用 /proc 条目
/proc/cpuinfo - CPU 信息/proc/meminfo - 内存信息/proc/xxx/cwd - PID 为 xxx 的进程的当前工作目录/proc/xxx/exe - 可执行文件的路径/proc/xxx/fd/ - 打开的文件描述符/proc/xxx/smaps - 内存映射详情来源: README.md336-342
Java 应用需要特殊的调试方法
kill -3 <pid>jps - 列出 Java 进程jstat - JVM 统计监视jstack - Java 线程堆栈跟踪jmap - 内存映射和堆转储可以使用 SJK tools 进行高级 Java 调试。
来源: README.md324-325
对于全面的系统监视和分析,有几种工具可以提供跨多个子系统的集成视图。
| 工具 | 主要目的 | 常见用法 |
|---|---|---|
dstat | 系统统计 | 快速系统概览,包含集成指标 |
glances | 系统监视器 | 多子系统仪表板 |
sar | 系统活动报告 | 历史性能数据分析 |
sysdig | 系统探索 | 深入的系统可见性和故障排除 |
perf | 性能分析器 | 内核级性能分析 |
使用 sar 进行的历史分析可深入了解过去的性能问题,显示 CPU、内存、网络等指标。
来源: README.md320-321 README.md343-346
来源: README.md320-321 README.md343-350
这些工具可用于识别底层系统和诊断硬件相关问题
uname 或 uname -a:显示系统信息,包括内核版本lsb_release -a:发行版特定的信息dmesg:查看内核环形缓冲区消息(适用于硬件或驱动程序问题)来源: README.md348-350
free -h (以人类可读的格式显示内存使用情况)top 或 htop (按内存使用量排序)cat /proc/<pid>/smapsjmap -heap <pid>top 或 mpstattop (按 P 键可按 CPU 排序)strace -p <pid>perf top -p <pid>df -hdu -sh /* 然后深入查看ncdu /lsof | grep deletednetstat -lntp | grep <port>curl 或 wgetmtr <destination>tshark -i <interface> -f "port <port>"来源: README.md316-350
系统调试通常需要结合其他领域的工具
Unix-like系统的强大之处在于通过管道组合各种专用工具。例如
ps aux | grep high-cpu-process | awk '{print $2}' | xargs strace -p
此管道根据名称查找进程,提取其 PID,并将其附加到 strace。
来源: README.md98-106 README.md336-342
虽然大多数调试工具在不同的 Linux 发行版中都可用,但有些工具具有特定于平台的变体或替代方案
大多数工具都可以通过包管理器获得
apt-get install htop iotop iftop # Debian/Ubuntu
yum install htop iotop iftop # Red Hat/CentOS
pacman -S htop iotop iftop # Arch Linux
许多此类工具可以通过 Homebrew 或 MacPorts 获得。一些内置工具的语法与 Linux 略有不同。有关更多详细信息,请参阅 macOS 专用。
Windows 用户可以通过 Cygwin、WSL(Windows Subsystem for Linux)或 Windows 特定的替代方案访问类似功能。有关具体信息,请参阅 Windows 指南。
来源: README.md552-568
有效的系统调试需要了解多种专用工具以及根据上下文解释其输出的能力。Linux/Unix 命令行提供了强大的工具集,用于诊断系统堆栈的各个级别的硬件和内核到应用程序的问题。
通过掌握这些调试工具,系统管理员和开发人员可以有效地识别和解决性能问题、资源限制和意外的系统行为。
来源: README.md312-353