- 博客(823)
- 资源 (44)
- 收藏
- 关注
原创 5.46 BCC工具之memleak.py解读
内存泄漏是指程序在分配内存后未能释放它,导致系统内存逐渐被消耗。在长时间运行的程序中,内存泄漏可能会导致性能下降、系统不稳定或其他问题。而memleak就是用于检测内存泄漏的工具,跟踪未被释放的杰出内存分配。它可以跟踪并匹配内存分配和释放请求,并为每个分配收集调用堆栈。然后打印出哪些调用堆栈执行了未随后释放的分配操作的摘要信息。支持使用libc函数进行的用户模式分配,以及使用kmalloc/kmem_cache_alloc/get_free_pages和相应的内存释放函数进行的内核模式分配。
2024-03-05 08:23:35 772
原创 5.45 BCC工具之kvmexit.py解读
kvmexit目的是为了定位频繁退出的原因,来提奥斯虚拟机的频繁退出可能会导致性能问题,并通过显示详细的退出原因以及在一台物理机器上运行的所有虚拟机的每个虚拟机退出的计数,找到减少甚至避免退出的解决方案。该工具有一定的限制,主要是鉴于不同架构的硬件辅助虚拟化技术,目前我们只适应intel中的vmx。
2024-03-05 07:11:49 124
原创 5.43 BCC工具之exitsnoop.py解读
Linux将进程终止信息保存在'exit_code'中,这是一个int值,位于中定义的'task_struct'结构体内。非零退出值的含义取决于程序。exitsnoop --label=exit # 为每行输出添加 'exit' 标签。-x, --failed 只跟踪失败的情况,排除 exit(0)exitsnoop --per-thread # 跟踪每个线程的终止。-p PID, --pid PID 只跟踪此PID。--per-thread 跟踪每个线程的终止。
2024-03-04 07:23:57 176
原创 5.42 BCC工具之execsnoop.py解读
execsnoop工具通过跟踪exec()系统调用来跟踪短时进程(也称为瞬时进程或快速执行的进程)。当进程通过exec()系统调用执行新的程序时,execsnoop能够捕获这些事件,并输出短时进程的基本信息,包括进程PID、父进程PID、命令行参数以及执行的结果。例如当系统的CPU使用率和平均负载很高,但通过常规工具找不到高CPU使用率的进程时,可能是由于某些进程在不断崩溃和重启导致的。在这种情况下,execsnoop可以帮助识别这些短时进程,从而找到问题的根源。此外,execsnoop。
2024-03-04 07:23:20 198
原创 5.41 BCC工具之uthreads.py解读
uthreads工具跟踪Java或原始(C)pthreads中的线程创建事件,并打印新创建线程的详细信息。对于Java线程,会打印线程名;对于pthreads,如果有符号信息可以解析,则会打印线程的启动函数。
2024-03-03 08:26:19 172
原创 5.40 BCC工具之ustat.py解读
ustat是一个类似于“top”的工具,用于监控高级语言中的事件。它为每个使用Java、Node、Perl、PHP、Python、Ruby和Tcl运行时的进程打印关于垃圾收集、方法调用、对象分配以及各种其他事件的统计信息。
2024-03-03 08:25:55 238
原创 5.39 BCC工具之uobjnew.py解读
uobjnew工具统计了新的对象分配事件,并打印出统计信息,包括哪些对象类型被频繁分配,以及该类型已分配了多少字节。这有助于诊断常见的分配路径,而这些路径又可能会导致大量的垃圾回收。
2024-03-02 07:59:02 290
原创 5.38 BCC工具之ugc.py解读
ugc工具跟踪包括Java、Python、Ruby和Node在内的高级语言中的垃圾回收事件。如果可用,每个GC事件都会附带打印一些由该语言的运行时提供的附加信息。同时还会提供GC事件的持续时间。
2024-03-02 07:58:33 387
原创 5.37 BCC工具之uflow.py解读
uflow工具用于跟踪方法的进入和退出事件,并打印一个可视化的流程图,显示方法是如何进入和退出的,类似于带有断点的跟踪调试器。这对于理解Java、Perl、PHP、Python、Ruby和Tcl等高级语言中的程序流非常有用,这些语言为方法调用提供了USDT探测。
2024-03-01 08:37:13 332
原创 5.36 BCC工具之ucalls.py解读
ucalls工具总结了包括Java、Perl、PHP、Python、Ruby、Tcl和Linux系统调用在内的各种高级语言中的方法调用。它显示最常调用方法的统计信息,以及这些方法的延迟(持续时间)。通过系统调用支持,ucalls可以提供关于进程与系统交互的基本信息,包括系统调用计数和延迟。然后,可以使用其他BCC工具(如trace、argdist、biotop、fileslower等)进一步探索这些信息。
2024-03-01 08:36:54 298
原创 5.35 BCC工具之ttysnoop.py解读
ttysnoop工具用于探测 (snoop) 来自 TTY (Teletypewriter) 设备或 PTS (Pseudo-Terminal Slave) 设备的输出。TTY 设备通常代表终端,而 PTS 设备是伪终端的从设备,常用于例如 SSH、screen或tmux这样的会话。通过在内核层面捕获与特定 TTY 或 PTS 设备相关的输出。
2024-02-29 10:08:19 4238
原创 5.33 BCC工具之tplist.py解读
tplist工具用于列出系统中可用的内核跟踪点(tracepoints)和用户静态定义的跟踪(USDT)探针。包括它们的格式。它可以用来发现探针点,以便与trace和argdist工具一起使用。内核跟踪点分散在内核中,为块和网络I/O、调度、电源事件以及许多其他主题提供有价值的静态跟踪。USDT探针放置在库(如libc)和可执行文件(如node)中,并提供静态跟踪信息,这些信息可以在运行时(可选地)打开和关闭。
2024-02-28 07:26:48 134
原创 5.30 BCC工具之stackcount.py解读
stackcount工具用于跟踪函数并计算它们的频率,同时记录完整的堆栈跟踪,并为提高效率在内核中进行汇总。它使用专有的BPF映射表数据结构进行统计。然偶用户空间读取调用栈ID和统计数字,然后从BPF映射表中取出调用栈信息再对符号翻译和打印输出。以帮助开发者分析和理解程序在运行时的行为。性能场景上,例如,如果某个函数被频繁调用,或者某个调用路径占用了大量的 CPU 时间,那么这些信息就可以通过stackcount获取到。调试场景上,例如当程序出现故障时,stackcount。
2024-02-27 12:50:51 248
原创 5.29 BCC工具之reset-trace.sh解读
从文件名就可以理解这个工具是用来reset trace状态的。那么我们可能永远都不需要这个工具。如果你使用-9(以及其他信号,如SIGTERM)杀死bcc工具,或者bcc工具崩溃,那么内核跟踪可能会处于半启用状态。这听起来并不那么糟糕:可能只是向从未读取的环形缓冲区写入数据的开销。此工具可用于清理跟踪状态,重置并禁用活动跟踪。警告:确保没有其他跟踪会话处于活动状态,因为这可能会阻止它们(可能不优雅地)运行。
2024-02-27 04:51:15 133
原创 5.28 BCC工具之readahead.py解读
操作系统的读预取机制通过预先读取一些页面来优化顺序操作,从而避免更昂贵的文件系统操作。readahead工具在给定的负载下显示系统上读预取缓存的性能,以调查任何缓存问题。它显示了缓存中未使用页面的数量,并打印了一个直方图,显示它们在缓存中停留的时间。那readahead工具在什么应用场景下使用呢?假设你正在开发一个React Native应用程序,该程序在重新编码本地存储中的视频时会进行大量读取。通常,这样的应用程序会是多层的,并具有过渡性的库依赖关系。
2024-02-27 04:50:53 97
原创 5.25 BCC工具之inject.py解读
inject工具可以保证在给定调用链和一组可选的predicate的情况下,指定注入模式(kmalloc、bio等)的适当错误返回。此外,还可以选择打印生成的BPF程序,以供修改/调试之用。生成的程序在PID索引的堆栈上运行。一般来说,为了实现“仅在此调用链和这些predicate存在时失败”的目标,会在每个中间函数的kprobe/kretprobe上进行记录。Top层函数(调用链末端的函数)负责在kprobe中创建pid_struct,并在kretprobe中将其从映射中删除。
2024-02-25 13:25:28 42
原创 5.24 BCC工具之funccount.py解读
funccount工具可以追踪与指定模式匹配的函数、追踪点或USDT探针,并会在追踪过程中打印它们的计数摘要。
2024-02-25 12:57:33 77
原创 5.23 BCC工具之drsnoop.py解读
drsnoop是一个内存工具,它追踪全系统内存的direct reclaim(直接回收)操作,并打印出各种详细信息。
2024-02-24 23:15:41 116
原创 5.22 BCC工具之deadlock.py解读
deadlock工具用于检测运行进程中的潜在死锁(锁顺序反转),但它不适用于共享互斥锁或递归互斥锁。如果程序发现潜在的锁顺序反转,程序将转储互斥锁的循环和每个互斥锁被获取时的堆栈跟踪,然后退出。此程序只能找到在程序跟踪进程时发生的潜在死锁。它无法找到在程序附加到进程之前可能已经发生的死锁。由于这会跟踪被跟踪进程上的所有互斥锁的锁定和解锁事件以及所有线程创建事件,因此,如果进程具有许多线程和互斥锁,则此bpf程序的开销可能会非常高。您应该只在可以接受减慢速度的进程上运行此程序。
2024-02-24 23:15:37 142
原创 5.21 BCC工具之criticalstat.py解读
也可以参考:Linux内核的preemptoff和irqoff跟踪器,它们提供类似的跟踪但有一些限制。这些跟踪器用于在Linux内核中跟踪抢占关闭(preemptoff)和中断关闭(irqoff)的情况,但由于设计或实现的限制,它们可能无法提供与某些其他跟踪工具相同级别的详细信息或灵活性。因此,在使用这些跟踪器时,需要了解它们的适用范围和限制,并相应地调整跟踪策略。
2024-02-23 22:10:26 144
原创 5.20 BCC工具之compactsnoop.py解读
在系统范围内跟踪压缩区,并打印各种详细信息。是 Linux 内核提供的一个接口,用于主动触发内存整理(memory compaction)。内存整理是内核为了优化内存使用而进行的一种操作,它通过移动内存页来创建更大的连续内存块,从而满足某些内存分配请求对连续物理内存的需求。当向写入特定的值时,比如写入 1,就会触发系统主动进行一次内存整理。这种主动式的内存整理与系统在分配内存时由于当前内存分布无法满足应用需求而被动触发的内存整理相对。
2024-02-23 21:41:27 428
原创 5.19 BCC工具之capable.py解读
capable工具用于跟踪对内核函数的调用,该函数则用来执行安全能力检查,并为每个调用打印详细信息。
2024-02-22 23:29:00 150
原创 5.18 BCC工具之bpflist.py解读
bpflist工具显示当前正在使用BPF程序和映射的进程、pinned的BPF程序和映射以及已使能探针的进程。也就是说bpflist可以为我们展示出系统哪个BPF程序在运行,并打印相关的探针。
2024-02-22 23:07:02 234
原创 5.16 BCC工具之argdist.py解读
argdist.py工具用于跟踪指定的函数,并收集其参数并输出一个直方图,以及频率计数。我们可以用该工具来分析某个参数取值的分布,过滤并打印出我们感兴趣的参数,而无需附加调试器,并获得各种函数的一般执行统计信息。
2024-02-21 23:09:38 135
原创 5.15 BCC工具之kvm_hypercall.py解读
在该示例中,我们可以了解到如何使用eBPF(扩展BPF,Berkeley Packet Filter的扩展)和bcc(BPF Compiler Collection)来分析KVM(Kernel-based Virtual Machine)中的超级调用(hypercall)。即当exit_reason为VMCALL时,有状态的kvm_entry和kvm_exit记录以及相关的超级调用。
2024-02-19 22:23:19 187
原创 5.14 BCC工具之vfsreadlat.py解读
vfsreadlat.py工具用于跟踪VFS读取延迟分布情况,示例的运行结果是一个函数延迟分布直方图。
2024-02-19 22:11:59 105
原创 5.12 BCC工具之undump.py解读
undump工具用于ump UNIX 套接字数据包。这需要对内核函数进行动态跟踪,并且需要更新以匹配内核的改动。
2024-02-18 22:25:19 160
原创 5.11 BCC工具之statsnoop.py解读
从工具的名字也能知道,statsnoop工具用于跟踪stat()系统调用。那么stat()系统调用是做什么的呢?stat()是很常见的一种系统调用。用于获取文件或文件系统的状态信息。通过调用stat(),你可以获取到关于指定文件或目录的详细信息,如文件大小、文件类型、文件权限、文件所有者、文件创建/修改/访问时间等。
2024-02-17 22:13:34 255
原创 5.9 BCC工具之nodejs_http_server.py解读
同样地,我们先了解下USDT,USDT即Userland Statically Defined Tracing,它是一种静态定义的跟踪技术,用于在用户空间应用程序中添加自定义的跟踪点。USDT利用DTrace(动态跟踪)框架,允许开发者在代码中定义跟踪点,并在需要时启用它们。这样,开发人员可以在不改变程序代码的情况下,对程序的运行时行为进行详细的分析和调试。nodejs_http_server同样利用了USDT来跟踪node.js HTTP服务器请求。
2024-02-17 21:36:48 99
原创 5.8 BCC工具之mysqld_query.py解读
我们首先来看USDT,USDT即Userland Statically Defined Tracing,它是一种静态定义的跟踪技术,用于在用户空间应用程序中添加自定义的跟踪点。USDT利用DTrace(动态跟踪)框架,允许开发者在代码中定义跟踪点,并在需要时启用它们。这样,开发人员可以在不改变程序代码的情况下,对程序的运行时行为进行详细的分析和调试。而我们的mysqld_query就利用了USDT来跟踪MySQL server查询操作。
2024-02-16 10:12:29 302
pageowner 解析工具
2022-05-13
SELinux4AndroidO
2018-02-05
recovery_l10n
2015-04-10
解决Android4.3彩信幻灯片中gif格式图片不能正常播放
2014-07-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人