A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
CPU 异常
图 1 CPU 异常分解
top -H -d 1 -c 高亮列及运行进程 z x y 选择 shift+L/Rarrow
• -d 磁盘读写报告 I/O 统计 • -r 内存使用及缺页 • -u CPU • -l 展示命令行及参数 • -w switch • -t 显示线程的统计 • -T 每秒展示活动进程的 CPU 使用率 pidstat -u 1 按线程组关系聚合展示 CPU 消耗时间,帮助找出 busy 线程 pidstat -t 1 -T ALL
• -b 块统计 • -B 页面 • -r 页面使用统计 • -R 页面回收统计 • -d 磁盘使用统计 • -q 调度统计 • -S swap • -m 运行频率 • -v 文件 inode dentry 活动统计 • -w 调度 switch • -W 换入换出统计 • -n 网络 DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 and UDP6 • -s 00:00:00 -e 00:21:00 指明要查看的开始结束时间
• -c 统计系统调用次数及时间 • -f 也 trace 子进程调用 • -e 指明关心的调用 eg. -e open,write 命令执行时挂起,了解进程挂在哪个 syscall strace cmd arg 进程系统调用开销较大,获取 syscall 统计 strace -p PID -c
• bt 查看执行堆栈 • frame 切换工作帧 用户进程的 cpu 消耗影响系统整体使用,配合 debuginfo 及代码可大致梳理出占用逻辑,attach 后,进程会 STOP gdb -p PID
perf top 在线采样及展示: • -e 指明事件,默认是 cycle,全部时间可 perf list 查询 • -G 调用图 • -F 采样频率 • -d 刷新间隔 • -p 特定进程 • -C 特定核 perf top -d1 -G -F 99 -z shift + e 可展开堆栈视图 shift + c 可折叠堆栈视图
perf record/report
perf record -F 99 -a -g -p PID -C 6 sleep 5 perf report
内存异常
图 2 内存异常分解
一般检查
free cat /proc/self/status cat /proc/self/smaps numastat -m numactl --hardware cat /proc/meminfo
[root@TestMaster ~] $ cat /proc/zoneinfo |egrep "zone|min|low|high|free|present" Node 0, zone DMA pages free 3977 min 33 low 41 high 49 present 3998 nr_free_pages 3977 nr_free_cma 0 high: 0 high: 0 high: 0 high: 0 Node 0, zone DMA32 pages free 27743 min 6117 low 7646 high 9175 present 782298 nr_free_pages 27743 nr_free_cma 0 high: 186 high: 186 high: 186 high: 186 Node 0, zone Normal pages free 29987 min 10744 low 13430 high 16116 present 1310720 nr_free_pages 29987 nr_free_cma 0 high: 186 high: 186 high: 186 high: 186
三条水线
sysctl -a|grep extra_free_kbytes min_free_kbytes extra_free_kbytes
的组合值构成三个水线。
• 直接回收线 MIN min_free_kbytes • 后台回收线 LOW 5/4*min_free_kbytes + extra_free_kbytes • 后台回收停止 HIGH 3/2 * min_free_kbytes + extra_free_kbytes
内核结构缓冲
slabtop 了解当前内核数据结构内存消耗
I/O 异常
图 3 I/O 异常分解
cfq deadline noop
当意外的 I/O 延迟发生,需要深入了解 I/O 延迟分布,需要使用 blktrace & blkparser 工具进行细致分析。
学会合理使用 oflag 标志 sync 同步刷出数据 direct 绕过 pagecache。
#用来标定系统 I/O 能力的便捷工具: fio -filename=/dev/mapper/vg_os-testlv -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=8k -size=100G -numjobs=96 -runtime=60 -group_reporting -name=mytest
面向块占用及文件系统占用的查询分析:
strace 可以看出两个命令原理的差异:df 读取文件系统信息,du stat 各个文件然后累加。
两者出入较大需进一步考察: 是否存在空洞? 是否一个文件用户已经看不到但是文件系统还没有真正删除?(就是打开文件被删除的情况 lsof +L1) 是否被某些挂载点隐藏了之前的目录文件? df 显示错误的话怀疑是否 fs 损坏?
网络异常场景
图 4 网络异常分析
ethtool -S 关注 drop error
tc -s -d qd 关注包 drop 情况
常用连接查看 netstat -ntp netstat -ntpl ss -ie ss -s dstat 3 10
• -i 待抓取的网口名字 • -w 抓包文件,可以是时间格式化串 • -G 回滚时长,单位秒 • -c 抓取多少个包后退出 • -s 抓取部分报文,单位字节 • -r 读取抓包文件离线分析 • -z 调用 gzip 等工具做压缩 • -Z 切换 user 运行,默认是 tcpdump • -B 设置 buf 大小,不然抓不全单位 KB 10240 tcpdump tcp port 80 and host tcpdump -s0 -w %m_%d_%H_%M_%S.pcap -G 5 -z gzip -Z root -c 100000 -i any
宕机场景分析
图 4 网络异常分析
• log 查看宕机关联日志 • bt 查看宕机位置 • sys 查看基本信息 crash vmcore vmlinux vmlinux 来自于 kernel debuginfo 包,是带调试信息的二进制内核镜像 如果系统未正确生成 vmcore, 需检查 /etc/kdump.conf 配置及其中的设定 vmcore 路径 此处讨论已开始涉及内核态问题,常见异常分析领域不再展开