文章

Linux 内核学习笔记:Linux 命令

Linux 内核学习笔记:Linux 命令

这一篇记录 Linux 命令里的几类入口:网络性能指标、网络配置、socket 信息、吞吐率和 PPS、连通性和延迟、日志 PV/UV 分析。结合这组 OS/Linux 笔记,命令部分扩成各模块的观测入口:进程、内存、文件、设备、网络、内核事件。

问题索引

主题本篇记录
网络性能指标带宽、延迟、吞吐、PPS、错误、丢包
网络配置ip、ifconfig、MTU、网卡状态
socket 信息ss、连接状态、队列、backlog
吞吐率和 PPSsar -n、ip -s link
连通性和延迟ping、traceroute、mtr
日志 PV/UVwc、awk、sort、uniq、head
Linux 观测入口/proc、/sys、perf、ftrace、BPF

1. 命令作为观察入口

系统问题通常要先定位对象:进程、地址空间、fd、文件系统、块设备、网卡、socket、调度事件。命令的作用是把这些对象的状态拿出来。

问题入口
当前进程在做什么ps、top、pidstat、strace
内存压力在哪里free、vmstat、/proc/meminfo、smaps
文件和 fd 怎么连/proc/<pid>/fd、lsof、stat
磁盘 I/O 是否慢iostat、pidstat -d、/proc/diskstats
网络是否丢包ip -s link、ss、sar -n、tcpdump
内核路径在哪里慢perf、ftrace、bpftrace

先选对象,再选命令。只看单个指标容易误判,例如 CPU 高可能是用户态计算、内核态系统调用、软中断、I/O 等待或调度抖动。

2. 网络性能指标

网络指标先记四个基础量:带宽、延迟、吞吐率、PPS。

指标含义观察入口
bandwidth链路理论或配置能力ethtool <dev>、云厂商规格
latency往返延迟或服务响应时间ping、mtr、应用指标
throughput实际传输速率sar -n DEV 1、ip -s link
PPS每秒包数sar -n DEV 1、网卡统计
errors错误包ip -s link、ethtool -S
drops丢包ip -s link、ss -s、驱动统计
retransTCP 重传ss -s、sar -n TCP,ETCP 1

网络排查要同时看链路、协议栈和应用。链路层丢包、TCP 重传、accept 队列满、应用读慢,表现都可能是“请求慢”。

3. 网络配置和 socket 信息

ip 是现代 Linux 查看网络配置的主要入口。

命令记录
ip addr地址、网卡状态
ip -s link网卡收发包、错误、丢包
ip route路由表
ethtool <dev>链路速度、duplex、offload 等
ethtool -S <dev>网卡驱动统计

socket 信息优先用 ss。

命令记录
ss -antpTCP 连接、状态、进程
ss -lntp监听端口
ss -ssocket 汇总
ss -tiTCP 详细信息,如重传、拥塞控制

Recv-Q 和 Send-Q 要结合状态看。监听 socket 上的队列和已建立连接上的队列含义不同;服务端 backlog、accept 速度、应用读取速度都会影响队列表现。

4. 连通性、延迟、抓包

命令用途
ping <host>基础连通性和 RTT
traceroute <host>路径跳数和中间节点
mtr <host>连续路径质量观察
tcpdump -i <dev> host <ip>抓包确认真实收发
nc -vz <host> <port>TCP 端口连通性

ping 通不代表 TCP 服务可用;TCP 端口通也不代表应用层协议正常。网络排查通常从 L3 连通性、L4 端口、L7 应用日志逐层确认。

5. 日志 PV/UV 分析

日志分析适合作为文本处理入口。大日志先看大小和格式,再做流式处理。

目标命令入口
看文件大小ls -lh access.log
看最新内容tail -n 100 access.log
统计 PVwc -l access.log
按日期分组awk 提取时间字段后 sort | uniq -c
统计 UV提取 IP 或用户标识后 sort -u | wc -l
Top Nsort | uniq -c | sort -nr | head

大文件处理避免无目的 cat。优先用 head、tail、less、awk、grep、sort 这类流式工具。需要多次分析时,可以先抽取必要字段生成中间文件。

6. 进程、线程、调度

目标命令 / 路径
看进程ps -ef、ps -o pid,ppid,stat,comm
展开线程ps -eLf、top -H -p <pid>
看状态/proc/<pid>/status
看等待点ps -o pid,stat,wchan,comm -p <pid>、/proc/<pid>/wchan
看上下文切换pidstat -w 1、vmstat 1
看调度延迟perf sched record、perf sched latency

进程状态要区分 sleeping 和 runnable。D 状态常指不可中断睡眠,可能和 I/O、文件系统、驱动路径相关;R 可能正在运行,也可能在 runqueue 等 CPU。

7. 内存和地址空间

目标命令 / 路径
系统内存free -h、cat /proc/meminfo
内存压力vmstat 1
进程映射cat /proc/<pid>/maps
VMA 统计cat /proc/<pid>/smaps
缺页统计ps -o pid,min_flt,maj_flt,comm -p <pid>
slabslabtop、cat /proc/slabinfo

RSS、VSS、PSS 的含义不同。共享库、page cache、mmap 文件都会影响看到的数值。只看 top 的 RES 不足以解释所有内存问题。

8. 文件、fd、文件系统、块 I/O

目标命令 / 路径
fd 列表ls -l /proc/<pid>/fd
fd offset/flagscat /proc/<pid>/fdinfo/<fd>
打开文件lsof -p <pid>
inode 信息stat <file>、ls -li
挂载findmnt、mount
磁盘空间df -h、du -sh
块设备lsblk -o NAME,TYPE,SIZE,ROTA,SCHED
I/O 指标iostat -x 1、pidstat -d 1

fd、struct file、inode 的区别可以通过 /proc/<pid>/fd 和 fdinfo 观察。fork() 后 fd 共享 offset 的问题,也可以用 fdinfo 看偏移变化。

9. 设备、中断、内核事件

目标命令 / 路径
中断分布cat /proc/interrupts
软中断cat /proc/softirqs
设备树ls /sys/class、ls /sys/bus
模块lsmod、modinfo <module>
内核日志dmesg -T
tracefs/sys/kernel/tracing
perfperf top、perf record、perf report
BPFbpftrace、bpftool

内核事件观察要注意权限、内核配置和生产环境开销。perf top、ftrace、BPF 都可能影响系统,范围要收窄。

10. 命令到内核对象的映射

命令 / 路径对应内核对象
/proc/<pid>/statustask_struct 及其统计
/proc/<pid>/mapsmm_struct、VMA
/proc/<pid>/fdfiles_struct、fdtable、struct file
sssocket、TCP 状态、队列
ip -s linknet_device 统计
/proc/interruptsIRQ 统计
/proc/softirqssoftirq 统计
/proc/meminfo内存管理全局统计
/proc/diskstatsblock layer 统计

检查点与参考回答

问题参考回答
网络性能常看哪些指标?带宽、延迟、吞吐率、PPS、错误、丢包、重传、连接队列等。不同指标对应链路、协议栈和应用不同层次。
查看 socket 状态优先用什么?优先用 ss。常用 ss -antp 看 TCP 连接和进程,ss -lntp 看监听端口,ss -s 看汇总。
ip -s link 主要看什么?看网卡收发字节数、包数、错误和丢包。它适合确认链路层和驱动层面的收发情况。
大日志为什么慎用 cat?cat 会无差别输出整个文件,大日志会刷屏并造成额外 I/O。先用 ls -lh 看大小,再用 head、tail、less、awk、grep 做流式处理。
如何观察进程地址空间?用 /proc/<pid>/maps 看 VMA,用 /proc/<pid>/smaps 看每段 RSS/PSS/匿名页/文件页统计。
如何观察 fd 和文件偏移?用 /proc/<pid>/fd 看 fd 指向,用 /proc/<pid>/fdinfo/<fd> 看 offset 和 flags。
如何观察调度延迟?可以用 perf sched record 记录调度事件,再用 perf sched latency 查看 runnable 后等待运行的延迟。
如何观察中断和软中断?用 /proc/interrupts 看硬中断分布,用 /proc/softirqs 看软中断计数,网络路径重点看 NET_RX 和 NET_TX。

本篇参考

  • Michael Kerrisk, The Linux Programming Interface
  • Brendan Gregg, Systems Performance
  • Linux man-pages
  • Linux Kernel Documentation: admin-guide, networking, tracing
本文由作者按照 CC BY 4.0 进行授权