eBPF监控工具bcc系列二性能问题定位

这里将问题诊断分为两个阶段,第一阶段是定性分析,第二阶段是是用bcc进行定量分析。

1.   阶段一

在使用bcc工具前,先要进行基本的系统性能判断,如下十个步骤,可以1到2分钟之内观测完毕。

相关脚本可以参考

https://github.com/kernel-z/LinuxProfiling

l   uptime

l   dmesg | tail

l   vmstat 1

l   mpstat -P ALL 1

l   pidstat 1

l   iostat -xz 1

l   free -m

扫描二维码关注公众号,回复: 404934 查看本文章

l   sar -n DEV 1

l   sar -n TCP,ETCP 1

l   top

发现问题之后,就进入到阶段二。

2.   阶段二

阶段二的相关工具位于bcc源码中tools文件夹中,如果安装在自定义目录就位于安装目录的tools文件夹中。

            一般情况下载阶段中是能发现问题大体方向的,如果第一阶段没有发现任何情况,说明系统正常直接洗洗睡吧。如果发现问题肯定是专向的问题,例如是IO问题或者内存问题或者其他等等。

            1.活捉进程execsnoop,输出如下:

# ./execsnoop.py

PCOMM            PID    PPID   RET ARGS

dd               8841   1279     0 /bin/dd if=/dev/zero of=test.bin bs=1 count=100000000

抓取当前活跃的进程。特别是一闪而过的短命进程,以及进程的返回值和其参数。这个工具跟踪了execute系统调用,在创建新进程的时候是fork->exec的,当exec时候就会被抓住,有些应用只有fork没有执行exec就不会被抓到。加上-x参数就可以抓到exec失败的进程。参数-t可以打印出时间戳,-n参数可以进行名字过滤。参数-l可以识别进程的指定参数。

2.Opensnoop可以跟踪应用工作时打开的文件,数据文件、日志文件、配置文件等,当企图读取不存在文件时,可以快速发现。特别适用于发现应用的配置文件。其中-p参数可以用于过滤PID,-T参数可以用于打印时间戳,-x参数可以打印失败打开,-d参数表示设定跟踪时间,-n参数可以进行名字过滤。

3.ext4slower (or btrfs*, xfs*, zfs*)工具可以跟踪ext4文件系统并记录通用操作,打印超过的阈值。用于定位通过文件系统的慢磁盘I/O。可以定位文件系统延时是否超过了给定的阈值。其检测范围是,从VFS接口到文件系统结束,包括文件系统锁、运行队列延时、CPU周期。除了ext4slower,现在已经有其他文件系统的工具btrfsslower, xfsslower, and zfsslower,此外还有一个fileslower工作在VFS层,可以跟踪所有事情,不过开销较高。执行中直接加入参数例如ext4slower 1表示跟踪ext4操作中超过1ms的操作,如果是0表示跟踪所有操作,使用-j参数可以用逗号隔开输出信息,用于作为其他可视化工具的导入。

4.biolatency工具可以用来跟踪磁盘I/O延时,当中止掉的时候会打印系统磁盘延时的柱状图。对iostat这种平均数据有很好的补充。其中-T参数表示间隔多久打印一次柱状图,-m参数使用毫秒单位,-Q参数表示请求放到内核队列就开始,包含其队列延时。默认是没有-Q的,能反映设备的IO性能,-D参数会打印每个磁盘的柱状图。

5.biosnoop工具打印每个磁盘IO的输出,可以用于检测每个磁盘IO,当磁盘压力大的时候输出会非常冗余。

Cachestat工具每秒打印文件系统缓存,可以确定命中率,用于调优。这里的缓存是指页高速高速缓存。-T参数表示输出时间戳。

tcpconnect工具打印每个活跃的TCP链接。开销很小,不会跟踪每个包。

tcpaccept工具跟踪内核监听TCP套接字链接的函数,例如accept()。打印每个TCP被动链接,也能用于入侵检测。工具只会跟踪成功调用accetp函数并进行TCP连接的,关闭端口的链接不会被显示。

tcpretrans工具会打印每个TCP重发的包,TCP重发会导致延时和吞吐量问题,要关注网络的饱和度以及cpu使用率。函数相比tcpdump消耗很低,只跟踪retransmit函数。参数-c可以得到重发次数。

runqlat工具可以计算进在CPU队列上的等待时间(也可以理解成是调度等待时间),并打印柱状图。在CPU饱和的时候可以用于计算在CPU 上等待时间。-m参数显示毫秒,每隔多少间隔来输出一个统计。-p参数来过滤PID,可以让工具更加高效。使--pidnss选项可以用于打印每个PID命名空间,分析容器性能。

profile工具是一个CPU profiler,每间隔时间进行堆栈采样,打印堆栈。可以用来发现消耗CPU资源的代码路径。参数-p可以指定PID。使用-F 可以修改采样频率,还可以指定是用户态-U和内核态-K。

 

https://github.com/iovisor/bcc/blob/master/docs/tutorial.md

经过以上bcc分析后,问题基本浮出水面,接下去就是解决吧。

祝大家玩的愉快。


猜你喜欢

转载自blog.csdn.net/notbaron/article/details/80236737