[转帖]利用BCC Tools追踪指定PID进程的方法

利用,bcc,tools,追踪,指定,pid,进程,方法 · 浏览次数 : 0

小编点评

**工具简介:** * **readelf:**用于查看ELF格式文件的信息,可以获取跟踪点的信息。 * **tplist:**可以显示来自二进制文件或正在运行的进程的probes列表。 * **trace:**可以参与系统级事件的跟踪,提供有关进程创建、状态和调用的信息。 **使用指南:** 1. **readelf:**运行 `readelf -h ` 命令,其中 `` 是要分析的ELF文件路径。 2. **tplist:**运行 `tplist -l` 命令,其中 `-l` 参数指定要显示的进程 ID。 3. **trace:**运行 `trace -n` 命令,其中 `-n` 参数指定要跟踪的系统事件类型。 **示例:** ``` # 获取 Java 应用程序的运行路径 readelf -h java.exe # 显示进程 ID tplist -l # 跟踪系统事件 trace -n ``` **注意:** * 使用 `readelf` 时需要具有读写权限。 * 使用 `tplist` 和 `trace` 时需要使用 `root` 用户或具有 `CAP_NET_ADMIN` 等权限。 * 使用 `trace` 时,需要指定要跟踪的系统事件类型。

正文

http://t.zoukankan.com/Emuaer-p-EmuaBCCTools3.html

 

  • 想法的产生
    • 通过熟悉许多BCC tools后,我们可以通过一些工具的组合,来实现一些定向的进程追踪
execsnoop跟踪新进程创建,跟踪exec函数。

bashreadline打印系统中所有bash上运行的命令,通过跟踪readline()函数实现。

biolatency跟踪块设备IO,记录IO延时分布并输出直方图。

biosnoop跟踪块设备IO,为每个IO打印一行。

biotop是块IO的top命令,查看哪些进程在使用磁盘IO.

bitesize显示各个进程的请求块大小的IO分布。

bpflist用于显示哪个BPF程序在运行,并打印打开的探针。

btrfsdist跟踪btrfs文件系统的读、写、打开和同步,并总结延时的直方图。

btrfsslower跟踪btrfs文件操作:reads,writes,opens,syncs 。衡量操作的花费时间,并打印超过阈值的信息。相比btrfsdist,这个是打印超过阈值的信息。

cachestat显示页高速缓存的命中率和丢失率,包括读写命中率

cachetop是cachestat 的top显示功能

capable跟踪内核负责安全监测的cap_capable函数,并打印调用信息。

cobjnew调用uobjnew,uobjnew统计新对象的分配事件,并打印出分配频率、分配大小的统计信息。帮助诊断导致大量垃圾回收问题的普通分配路径。

cpudist统计任务的on-CPU事件,在被调用前花费了多少CPU.这个提供了有用的信息可以用来指导硬件采购。也可以统计off-CPU事件,就是等待磁盘IO、锁、定时器和其他挂住的情况。

cpuunclaimed函数采样CPU运行队列长度,确定是否有idle的cpu.

dbslower跟踪Mysql或Postgresql的查询,然后打印超出延时的,默认延时是1ms。

dbstat跟踪Mysql或PostgreSQL数据库进程查询,并显示查询延时的直方图。

dcsnoop跟踪目录缓存查询,用于dcstat之后的高级查询。

dcstat显示目录缓存静态统计。

deadlock_detector用于检测运行进程潜在的死锁,将uprobes绑定到pthread_mutex_lock和pthread_mutex_unlock。

ext4dist跟踪ext4的reads,writes,opens,fsync,总结延时并得到直方图。

ext4slower显示ext4中reads,writes,opens,fsync中延时超过阈值的操作。

filelife跟踪短命文件,就是那些创建后就被删除的文件,例如gcc等。

fileslower显示文件同步读和写超过阈值的操作。

filetop是文件读和写的top。

funclatency计时内核函数,直到ctrl+c.例如./funclatency do_sys_open

funcslower显示内核或用户函数超过阈值。如./funcslower c:open -u 1

gethostlatency跟踪主机名查找调用,如getaddrinfo(),gethostbyname(),gethostbyname2().

hardirqs跟踪硬中断,并保存其消耗时间的统计信息。

inject通过调用链和可选的谓词集,保证指定注入模式的适当错误返回。

Javacalls会调用ucalls,ucalls统计在高级语言的方法调用,例如java,python,ruby,php和系统调用。显示最常调用的方法以及其延时。

javaflow调用uflow,uflow跟踪方法入口和退出事件,并打印流程图,类似跟踪的调试器。可以用来理解高级语言的程序流,这些高级语言提供了USDT探针。

javagc调用ugc,ugc跟踪高级语言的垃圾回收事件。

javaobjnew调用uobjnew函数,统计java新对象分配事件。

javastat会调用ustat,ustat类似top工具,用于监控高级语言的事件。

javathreads会调用uthreads,uthreads跟踪java或raw threads的进程创建事件

killsnoop跟踪kill()系统调用的信号。

llcstat跟踪缓存相关信息,如缓存miss事件。这些事件定义在uapi/linux/perf_event.h中。

mdflush跟踪md驱动层的flush的信息。

memleak跟踪内存分配和回收请求,收集每次分配的调用栈。会将调用分配后没有进行释放的打印出来。

mountsnoop跟踪mount()和umount()系统调用。

mysqld_qslower跟踪Mysql的查询,并打印超过阈值延时的,默认阈值是1ms。

nfsdist跟踪NFS的reads,writes,opens,getattr,并输出其直方图。

nfsslower显示NFS的reads,writes,opens,getattr,延时超过阈值。

nodegc通过ugc跟踪node的垃圾回收。

nodestat通过ustat显示node层的监控事件,类似top工具。

offcputime显示阻塞的调用栈,以及阻塞的事件。

offwaketime显示被阻塞的任务和内核调用栈,以及唤醒他们的线程。

oomkill跟踪linux中OOM,每个显示一行。

opensnoop跟踪系统中的open系统调用.

phpcalls会调用ucalls,总结php方法的调用情况。

phpflow调用uflow,跟踪方法的入口和退出并打印其方法流。

phpstat调用ustat,类似top工具来监视php的事件。

pidpersec显示每秒新进程创建的数量。

profile是CPU的profiler,在给定时间间隔中采样堆栈.

pythoncalls调用ucalls,ucalls总结python的方法调用情况。

pythonflow调用uflow,uflow跟踪python方法的入口和出口事件,并打印流程图。

pythongc调用ugc,ugc跟踪python的垃圾回收事件。

Pythonstat调用ustat,类似top工具监控python事件。

reset-trace可能永远用不到,如果使用kill -9杀掉bcc工具,会导致bcc工具崩溃,内核跟踪会处于半使能状态。使用reset-trace来清除跟踪状态并重置和禁止激活的跟踪。

rubycalls调用ucalls,ucalls总结ruby的方法调用情况。

rubyflow调用uflow,uflow跟踪ruby方法的入口和出口事件,并打印流程图。

rubygc调用ugc,ugc跟踪ruby的垃圾回收事件。

rubyobjnew调用uobjnew,uobjnew总结新对象分配事件,并打印分配频率。

rubystat调用ustat,类似top工具监控ruby事件。

runqlat总结调度器运行队列延时的直方图,并显示器等待时间。

runqlen总结调度器队列长度的直方图。

slabratetop显示内核中内存分配缓存(SLAB,SLUB)的使用率和总大小,类似top.

softirqs跟踪软中断,保存其统计信息。

solisten当一个程序要监听TCP连接的时候,跟踪内核调用

sslsniff跟踪OpenSSL的SSL_READ和SSL_WRITE函数。

stackcount跟踪函数的使用频率和整个调用栈,如./stackcount submit_bio

statsnoop跟踪系统的stat()系统调用。

syncsnoop跟踪内核sync的调用。

syscount总结系统或指定进程的系统调用。

trace参与了系统级事件的跟踪。

tcpaccept跟踪接收tcp套接字链接(accept)的内核函数。

tcpconnect跟踪活动TCP链接(connect)的内核函数

tcpconnlat跟踪活动TCP链接,及链接延时。

tcplife总结跟踪期间打开和关闭的TCP会话。

tcpretrans跟踪TCP重发函数。

tcpstates打印TCP状态改变的信息,包括每个状态的持续时间。

tcpsubnet显示目标子网的吞吐量,只在IPv4工作。可以指定子网。

tcptop类似top功能,根据主机和端口显示吞吐量。

tcptracer跟踪TCP链接(connect,accept)和关闭的内核函数。

tplist显示内核tracepoinst和USDT探针,包括他们的格式。

ttysnoop观测tty或pts设备,并打印设备上的输出。

vfscount通过跟踪vfs_开头的内核函数来记录VFS调用

vfsstat跟踪vfs调用,并输出每秒情况。

Wakeuptime衡量线程锁,显示唤醒操作线程的栈,唤醒和目标程序名字,以及总的阻塞时间。

xfsdist跟踪XFS的reads,writes,opens,fsyncs,并输出直方图。

xfsslower显示XFS的reads,writes,opens,fsyncs中超过阈值的操作。

zfsdist跟踪ZFS的reads,writes,opens,fsyncs,并输出直方图。

zfsslower显示ZFS的reads,writes,opens,fsyncs中超过阈值的操作。
  • 这里我们需要用到三个工具readelftplisttrace
    • readelf一般用于查看ELF格式的文件信息,常见的文件如在Linux上的可执行文件。我们可以利用它来获取跟踪点,例如java应用程序。
    • tplist可以显示来自二进制文件或正在运行的进程的probes列表。当运行java时,追踪JVM的运行路径。
    • trace 参与了系统级事件的跟踪我们可以利用他接受java的调用,无需重新启动Java应用程序进行重新编译。

与[转帖]利用BCC Tools追踪指定PID进程的方法相似的内容:

[转帖]利用BCC Tools追踪指定PID进程的方法

http://t.zoukankan.com/Emuaer-p-EmuaBCCTools3.html 想法的产生 通过熟悉许多BCC tools后,我们可以通过一些工具的组合,来实现一些定向的进程追踪 execsnoop跟踪新进程创建,跟踪exec函数。 bashreadline打印系统中所有bas

[转帖]利用 libpcap 库进行流量统计与数据包分析

https://zhuanlan.zhihu.com/p/437187441 一、简介: Libpcap(Packet Capture Libray),即数据包捕获函数库。该库提供的C函数接口用于捕获经过指定网络接口的数据包,可以统计流量数据,可以添加过滤规则分析数据包数据内容。 Linux下的tc

[转帖]利用Python调用outlook自动发送邮件

↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ 使用Python发送邮件有两种方式,一种是使用smtp调用邮箱的smtp服务器,另一种是直接调用程序直接发送邮件。而在outlook中我们一般是没有权限去开启smtp服务的,所以一般只能通过第二种直接调用方式发送邮件 基础版本–

[转帖]利用Python调用outlook自动发送邮件

↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ 使用Python发送邮件有两种方式,一种是使用smtp调用邮箱的smtp服务器,另一种是直接调用程序直接发送邮件。而在outlook中我们一般是没有权限去开启smtp服务的,所以一般只能通过第二种直接调用方式发送邮件 基础版本–

[转帖]Linux利用Sysctl命令调整内核参数

https://cloud.tencent.com/developer/article/1721513?from=article.detail.1956187&areaSource=106000.18&traceId=lr3VPq-YZBl2ynblhnK3h 前言 sysctl 命令被用于在内核运

[转帖]如何利用wrarp测试oss性能?

https://zhuanlan.zhihu.com/p/529735003 前言 我们利用mino与ceph rgw搭建好的oss经过多层网络转发,传输速度必定有所折损,这个时候我们使用wrap来测试oss对象存储的真实性能。 利用wrarp测试oss性能 wrarp是minio项目下的一个开源测

[转帖]Linux常用命令:利用sed命令删除文件的特定行

http://www.dbs724.com/12806.html 前言 正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问题的。但是,一旦文件中的行数据非常多,而且数据冗杂的情况下,你还要用上面的方法去

[转帖]Shell脚本中利用expect实现非交互式

https://developer.aliyun.com/article/885723?spm=a2c6h.24874632.expert-profile.295.7c46cfe9h5DxWK 简介: expect非交互式 expect可以在脚本中完成一些交互式的操作,例如远程登录时要输入yes或者

[转帖]PostgreSQL任意命令执行漏洞利用(CVE-2019-9193)

https://zhuanlan.zhihu.com/p/143443516 最近没事曰曰内网,偶然发现了一个使用空密码的pg(是的,连爆破都省了)。用navicat连上去看了下几个库都是一些业务测试数据,没什么好收集;不死心,google了一下发现有个比较新的CVE好像可以操作一下~ 漏洞概述 最

[转帖]20. 利用Veeam ONE监控vSphere虚拟化平台(Veeam ONE安装及配置)

Veeam Backup & Replication主要用于备份及同步虚拟化平台,而Veeam ONE则主要用于监控平台之用,可以监控Veeam Backup & Replication的备份及同步情况,也可以监控VMware vSphere虚拟化平台及微软的Hyper-v虚拟化平台。本例主要介绍监