本文主要讲解缓冲跟踪型的系统调用分析,主要目的是为了探究和分析CPU在内核或与用户空间结合部分的系统调用细节,从中可以发现一些问题,用于性能或者其他问题研究。请大家读完哈,文末有福利。
首先是两个概念:
断点跟踪类型,其是在进行取样时,中断目标程序的执行来获取数据的,比如strace命令。
缓冲跟踪类型,这就和断点跟踪不一样了,它是可以将获取到的检测数据缓存在内核里,而目标程序可以不中断执行。dtrace命令就属于缓冲跟踪。
系统调用有很多,Linux操作系统可能就有几百个(具体没有统计)。
案例1:
我们以进程间通信相关的一个系统调用kill为例来检测系统中的具体情况。命令如下:
sudo dtrace -qn 'syscall::kill:entry { printf("%Y: %s (PID %d) sent a SIG %d to PID %d\n",walltimestamp,execname,pid,arg1,arg0);}'
复制
执行结果如下,其中PID=1位init进程,它是所有其他用户进程的祖先进程,并且会监视其他进程。
我们来分析下第一行:init 进程发送了一个SIG信号 15 到PID -13929,其中SIG 15 是指SIGTERM 信号
案例2:
我们可以利用dtrace命令对Postgres数据库进程进行系统调用分析。
命令:
sudo dtrace -n 'syscall:::entry execname == "postgres"/ { @[probefunc] = count(); }'
复制
执行结果如下,其中可以看到系统调用lseek/read_nocancel,调用比较多,其都是和文件操作相关,可以猜测此刻postgres数据库在做文件的处理比较多,如果要深入分析还需要再看当前postgresql管理系统的其它指标,比如系统正在执行的动作,SQL,任务等。
文末彩蛋来了,最近好些同学反馈是否有相关的自动化/性能测试课程,现将本人51CTO课程链接二维码附上,有需要的可以查看,有意向可以公众号发消息,会有专属优惠券!
文章转载自TimTest,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
[MYSQL] 服务器出现大量的TIME_WAIT, 每天凌晨就清零了
大大刺猬
62次阅读
2025-04-01 16:20:44
[MYSQL] query_id和STATEMENT_ID在不同OS上的关系
大大刺猬
54次阅读
2025-03-26 19:08:13
udev 针对单个设备进行规则触发
许玉冲
40次阅读
2025-03-22 15:15:24
[Linux] 有趣(花里胡哨)的终端显示
大大刺猬
31次阅读
2025-03-27 18:24:39
误删/lib64/libc.so.6文件如何恢复
- 我用我一生来爱你°
28次阅读
2025-03-27 17:21:52