- 博客(773)
- 资源 (44)
- 收藏
- 关注
原创 5.75 BCC工具之netqtop.py解读
追踪在数据链路层上执行数据包发送 (xmit_one) 和数据包接收 () 的内核函数。该工具不仅通过指定的网络接口追踪每个数据包,还分别统计发送和接收方向上的 PPS(每秒数据包数)、BPS(每秒位数)和平均数据包大小以及按大小范围分类的数据包数量。结果以表格形式打印输出,可用于了解感兴趣的网络接口上每个队列的流量负载分配情况,以判断是否均衡。整体性能信息则在底部提供。
2024-03-19 07:31:53 139
原创 5.74 BCC工具之bindsnoop.py解读
bindsnoop工具追踪执行套接字绑定的内核函数,也就是追踪IPv4和IPv6的bind()调用,并打印在系统调用之前设置的可能会影响绑定行为和绑定接口的套接字选项
2024-03-19 07:31:28 101
原创 5.73 BCC工具之gethostlatency.py解读
gethostlatency是一个网络性能分析工具。它用于追踪主机名查找调用(getaddrinfo()、gethostbyname() 和 gethostbyname2()),并显示执行查找的 PID 和命令、调用的延迟(持续时间,以毫秒为单位)以及主机字符串。
2024-03-18 06:55:08 193
原创 5.72 BCC工具之wakeuptime.py解读
wakeuptime工具追踪工作在工作队列中的等待情况,并记录工作的排队延迟(时间)分布,当按下 Ctrl-C 时,将其以直方图的形式打印出来。
2024-03-18 06:54:36 168
原创 5.71 BCC工具之wqlat.py解读
wqlat工具统计线程阻塞的时间,并显示执行唤醒操作的线程的堆栈跟踪,以及唤醒进程和目标进程的进程名,以及总的阻塞时间。这个阻塞时间是从一个线程阻塞时开始统计的,直到发送唤醒信号时结束。请注意,这个时间不包括目标线程的一些运行队列延迟,因为目标线程如果需要等待在CPU上的轮次,可能不会立即执行。所有显示的数据,包括堆栈跟踪、进程名和时间,都在内核中使用eBPF映射进行高效汇总。该工具旨在在offcputime之后使用,offcputime显示了直接阻塞的堆栈。
2024-03-17 00:07:08 167
原创 5.70 BCC工具之runqslower.py解读
runqslower工具显示了任务准备运行与之后在CPU上运行之间的高延迟调度时间。该工具需要Linux 4.9+(支持BPF_PROG_TYPE_PERF_EVENT)。
2024-03-17 00:06:46 68
原创 5.69 BCC工具之runqlen.py解读
runqlen工具用于分析和报告运行队列(run queue)的长度,并以直方图的形式展示。它通过在所有CPU上以99赫兹的频率对运行队列长度进行采样来工作。在操作系统中,运行队列是指内核用来管理待执行(runnable)进程的队列。当一个进程准备好执行,但由于某些原因(如CPU资源不足、调度策略等)尚未被分配到CPU上运行时,它就会被放入运行队列中等待。它显示了不同运行队列长度出现的频率,也就是运行队列占用情况,从而帮助开发者了解系统的调度负载情况。
2024-03-16 07:04:59 96
原创 5.68 BCC工具之runqlat.py解读
runqlat工具用于分析和监视运行队列延迟。运行队列是操作系统内核中用于管理待运行进程的数据结构。当进程准备运行时,它们会被添加到运行队列中,然后由调度器选择并在 CPU 上执行。runqlat工具通过测量进程在运行队列中等待的时间,并以直方图的形式展示,它显示了任务等待在CPU上运行的时间。这帮助开发者了解系统调度行为的性能。使用该工具可以帮助我们识别和解决与调度延迟相关的问题。例如,如果发现某个进程或线程在运行队列中等待的时间过长,可能是由于调度器的不公平行为、资源争用或其他原因导致的。
2024-03-16 07:04:38 71
原创 5.67 BCC工具之profile.py解读
profile工具是一个用于追踪程序执行调用流程的强大工具。它通过在定时间隔内对程序的堆栈跟踪进行采样,并记录采样结果的频率。我们通过使用该工具可以确定程序中的瓶颈和热点,进而优化代码以提高性能。
2024-03-15 08:06:11 210
原创 5.66 BCC工具之offwaketime.py解读
offwaketime工具用于追踪和分析 Linux 系统中线程的 Off-CPU 时间,即线程不在 CPU 上执行的时间。特别地,它还关注哪些线程(唤醒者)唤醒了之前处于阻塞或休眠状态的线程。这对于性能分析和调试非常有用,尤其是当你想知道为什么某个线程在一段时间内没有执行时。它可以显示被阻塞和“off-CPU”的内核堆栈跟踪和任务名称,以及唤醒它们的线程的堆栈跟踪和任务名称,以及从它们被阻塞到被唤醒时的总经过时间。这结合了offwaketime和wakeuptime工具的总结。
2024-03-15 08:05:26 344
原创 5.65 BCC工具之offcputime.py解读
此程序显示被阻塞的堆栈跟踪以及它们被阻塞的总时长。它的工作原理是跟踪线程何时被阻塞以及何时返回CPU,同时测量它们被阻塞的时间(也称为“非CPU时间”)和被阻塞的堆栈跟踪以及任务名称。此数据通过内核进行汇总,按唯一的堆栈跟踪和任务名称汇总阻塞时间。
2024-03-14 07:32:28 227
原创 5.64 BCC工具之llcstat.py解读
llcstat用于在系统内跟踪缓存引用和缓存未命中事件,并按 PID 和 CPU 进行统计汇总。这些事件在 uapi/linux/perf_event.h 中定义,并在不同的体系结构上具有不同的含义。对于 x86-64,它们表示 LLC 的未命中和引用。
2024-03-14 07:31:57 185
原创 5.62 BCC工具之cpudist.py解读
cpudist会将任务在CPU上的时间汇总为直方图,显示任务在被取消调度之前在CPU上花费的时间。这提供了有价值的信息,可以指示过度订阅(处理器太少而任务太多)、由于过多上下文切换而产生的开销(例如,多个线程共用的常见锁)、工作负载分布不均、任务过于细化等。默认情况下,通过简单地排除PID 0,CPU的空闲时间被排除在外。另外,同样的选项也可用于汇总任务的离CPU时间,这有助于理解线程被取消调度的频率以及它们在等待I/O、锁、计时器和其他挂起原因上所花费的时间。
2024-03-13 07:50:06 242
原创 5.63 BCC工具之cpuunclaimed.py解读
cpuunclaimed工具用于采样CPU运行队列并计算未被占用的空闲CPU。此工具会采样运行队列的长度,并确定当存在空闲CPU时,仍有线程在等待运行。它会报告系统范围内未被等待线程占用的空闲CPU的百分比。应用程序被绑定到部分而非全部CPU上,并且有可运行的线程无法由于这种配置迁移到其他CPU上。CPU亲和性(CPU affinity):一种优化策略,将线程留在CPU上以保持CPU cache的亲和性,即使这意味着在其他CPU空闲时需要短暂等待。
2024-03-13 07:47:35 346
原创 5.82 BCC工具之tcpdrop.py解读
tcpdrop工具打印被内核丢弃的 TCP 数据包或段的详细信息,包括导致丢弃的内核堆栈跟踪。当网络出现拥堵、资源不足或其他原因导致数据包被内核丢弃时,tcpdrop可以帮助开发者和网络管理员识别并定位问题。该工具通过钩住内核中处理TCP数据包的相关函数,捕获丢弃事件并收集相关信息,如丢弃的TCP数据包的源IP、目的IP、端口号等。此外,它还可以提供内核堆栈跟踪,显示导致丢弃事件的内核函数调用链。
2024-03-12 22:17:19 206
原创 5.61 BCC工具之syscount.py解读
syscount工具可以总结整个系统或特定进程的syscall计数,并打印可选的延迟信息。它对于一般的工作负载特征描述非常有用。
2024-03-12 07:18:30 337
原创 5.60 BCC工具之softirqs.py解读
软中断是内核中用于处理异步事件的一种机制,它们在特定的时机由内核调度执行,以完成诸如网络接收、磁盘 I/O 完成等任务。softirqs工具用于追踪和分析 Linux 内核中的软中断(softirq)事件。并将计时统计信息高效地存储在内核中。
2024-03-12 07:18:05 235
原创 5.59 BCC工具之ppchcalls.py解读
汇总了整个系统或特定进程的 计数,并提供了可选的延迟信息。它对于一般工作负载的特征描述非常有用。三,运行示例3.1 用法示例3.2 运行示例这些是前10个条目;你可以通过使用-T开关来获取更多内容。在这里,输出表明H_IPI,H_EOI和H_XIRR的hcalls非常常见,紧接着是H_VIO_SIGNAL,H_REMOVE等。默认情况下,ppchcalls会计算整个系统的数量,但我们可以将其指向感兴趣的特定进程:偶尔,hcall(超调用)的计数可能不足以满足需求,你还可能想要知道
2024-03-12 07:17:43 139
原创 5.58 BCC工具之mysqld_qslower.py解读
mysqld_qslower工具用于追踪 MySQL 服务器提供的查询,并打印出那些超过延迟(查询时间)阈值的查询。默认情况下,使用的阈值为 1 毫秒。
2024-03-11 07:18:13 265
原创 5.57 BCC工具之hardirqs.py解读
硬中断是由硬件设备(如网卡、磁盘控制器等)产生的,用于通知操作系统有紧急事件需要处理。正确地管理和响应硬中断对于系统性能至关重要,因为它们直接影响到系统的响应能力和吞吐量。而hardirqs工具用于跟踪硬中断(irqs),并将计时统计信息存储在内核中以提高效率。
2024-03-11 07:17:54 159
原创 5.56 BCC工具之funcslower.py解读
funcslower主要可以显示内核或用户函数调用慢于既定阈值的情况。当基于聚合的工具失败时,它可以用于最后的诊断。
2024-03-10 07:30:06 190
原创 5.55 BCC工具之funcinterval.py解读
eBPF/bcc非常适用于平台性能调优。通过funclatency工具,我们可以分析特定函数的性能,了解该函数的延迟情况。然而,有时性能下降并不是由于函数的延迟,而是函数调用之间的间隔。funcinterval正是为此而生。另外,在平台上进行硬件性能调优时,我们将使用协议分析器来分析性能,但大多数协议分析器都缺乏分布特性。使用协议分析器,你需要花费大量时间来检查每个细节的延迟。通过funcinterval,我们可以利用分布特性节省大量时间。
2024-03-10 07:29:41 126
原创 5.54 BCC工具之dbstat.py解读
dbstat工具用于追踪由 MySQL 或 PostgreSQL 数据库进程执行的查询,并显示查询延迟的直方图。
2024-03-09 06:54:27 154
原创 5.53 BCC工具之dbslower.py解读
dbstat用于追踪由MySQL或PostgreSQL数据库进程执行的查询,并显示查询延迟的直方图。
2024-03-09 06:54:07 339
原创 5.52 BCC工具之dbslower.py解读
dbslower工具用于追踪由 MySQL 或 PostgreSQL 服务器提供的查询,并打印出那些超过延迟(查询时间)阈值的查询。默认情况下,使用的阈值是 1 毫秒。
2024-03-08 07:26:22 475
原创 5.51 BCC工具之slabratetop.py解读
以类似于top命令的实时刷新显示方式,展示从内核内存分配缓存(SLAB 或 SLUB)中的分配速率和总字节数。例如:(注:SLAB 和 SLUB 是 Linux 内核中用于内存管理的两种不同机制,它们都提供了一种方式来缓存和管理小对象的内存分配。
2024-03-08 07:25:59 169
原创 5.50 BCC工具之shmsnoop.py解读
shmsnoop追踪shm*()系统调用。shm*()通常指的是与共享内存(shared memory)相关的系统调用,如shmget()shmat()shmdt(), 和shmctl()等。shmget(): 这个系统调用用于创建或获取一个共享内存段。它接收一个关键字(通常通过ftok()函数生成),共享内存段的大小,以及一些标志位(如IPC_CREAT用于创建新的共享内存段)。如果成功,它返回一个非负整数,即共享内存标识符(shmid);如果失败,则返回-1。shmat()
2024-03-07 07:25:22 242
原创 5.49 BCC工具之rdmaucma.py解读
首先,RDMA UCMA是什么?RDMA UCMA(用户空间连接管理器访问,Userspace Connection Manager Access)是与RDMA(远程直接内存访问,Remote Direct Memory Access)相关的一个概念。RDMA允许在两个或多个计算机之间进行通讯时,直接从一个主机的内存访问另一个主机的内存,而不需要操作系统CPU的参与。这种技术能够大大降低CPU的开销,并提高数据传输的效率。UCMA则是指用户空间的连接管理器访问,它是RDMA在用户空间的一个接口。
2024-03-07 07:24:49 362
原创 5.47 BCC工具之oomkill.py解读
oomkill工具用于跟踪 Linux 的内存溢出(OOM)查杀,并在每行显示一个 OOM 杀死的基本详细信息。
2024-03-06 07:23:34 169
原创 5.46 BCC工具之memleak.py解读
内存泄漏是指程序在分配内存后未能释放它,导致系统内存逐渐被消耗。在长时间运行的程序中,内存泄漏可能会导致性能下降、系统不稳定或其他问题。而memleak就是用于检测内存泄漏的工具,跟踪未被释放的杰出内存分配。它可以跟踪并匹配内存分配和释放请求,并为每个分配收集调用堆栈。然后打印出哪些调用堆栈执行了未随后释放的分配操作的摘要信息。支持使用libc函数进行的用户模式分配,以及使用kmalloc/kmem_cache_alloc/get_free_pages和相应的内存释放函数进行的内核模式分配。
2024-03-05 08:23:35 736
原创 5.45 BCC工具之kvmexit.py解读
kvmexit目的是为了定位频繁退出的原因,来提奥斯虚拟机的频繁退出可能会导致性能问题,并通过显示详细的退出原因以及在一台物理机器上运行的所有虚拟机的每个虚拟机退出的计数,找到减少甚至避免退出的解决方案。该工具有一定的限制,主要是鉴于不同架构的硬件辅助虚拟化技术,目前我们只适应intel中的vmx。
2024-03-05 07:11:49 114
原创 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 163
原创 5.42 BCC工具之execsnoop.py解读
execsnoop工具通过跟踪exec()系统调用来跟踪短时进程(也称为瞬时进程或快速执行的进程)。当进程通过exec()系统调用执行新的程序时,execsnoop能够捕获这些事件,并输出短时进程的基本信息,包括进程PID、父进程PID、命令行参数以及执行的结果。例如当系统的CPU使用率和平均负载很高,但通过常规工具找不到高CPU使用率的进程时,可能是由于某些进程在不断崩溃和重启导致的。在这种情况下,execsnoop可以帮助识别这些短时进程,从而找到问题的根源。此外,execsnoop。
2024-03-04 07:23:20 173
原创 5.41 BCC工具之uthreads.py解读
uthreads工具跟踪Java或原始(C)pthreads中的线程创建事件,并打印新创建线程的详细信息。对于Java线程,会打印线程名;对于pthreads,如果有符号信息可以解析,则会打印线程的启动函数。
2024-03-03 08:26:19 166
原创 5.40 BCC工具之ustat.py解读
ustat是一个类似于“top”的工具,用于监控高级语言中的事件。它为每个使用Java、Node、Perl、PHP、Python、Ruby和Tcl运行时的进程打印关于垃圾收集、方法调用、对象分配以及各种其他事件的统计信息。
2024-03-03 08:25:55 222
原创 5.39 BCC工具之uobjnew.py解读
uobjnew工具统计了新的对象分配事件,并打印出统计信息,包括哪些对象类型被频繁分配,以及该类型已分配了多少字节。这有助于诊断常见的分配路径,而这些路径又可能会导致大量的垃圾回收。
2024-03-02 07:59:02 283
原创 5.38 BCC工具之ugc.py解读
ugc工具跟踪包括Java、Python、Ruby和Node在内的高级语言中的垃圾回收事件。如果可用,每个GC事件都会附带打印一些由该语言的运行时提供的附加信息。同时还会提供GC事件的持续时间。
2024-03-02 07:58:33 373
原创 5.37 BCC工具之uflow.py解读
uflow工具用于跟踪方法的进入和退出事件,并打印一个可视化的流程图,显示方法是如何进入和退出的,类似于带有断点的跟踪调试器。这对于理解Java、Perl、PHP、Python、Ruby和Tcl等高级语言中的程序流非常有用,这些语言为方法调用提供了USDT探测。
2024-03-01 08:37:13 318
pageowner 解析工具
2022-05-13
SELinux4AndroidO
2018-02-05
recovery_l10n
2015-04-10
解决Android4.3彩信幻灯片中gif格式图片不能正常播放
2014-07-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人