问题标签 [systemtap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 如何监控哪些文件消耗了iops?
我需要了解哪些文件消耗了我的硬盘的 iops。仅仅使用“strace”并不能解决我的问题。我想知道,哪些文件真正写入磁盘,而不是页面缓存。我尝试使用“systemtap”,但我不明白如何找出哪些文件(文件名或 inode)消耗了我的 iops。有什么工具可以解决我的问题吗?
linux-kernel - 从 systemtap 中的 nd_syscall.vfork.return 获取新的 pid
我试图从一个奇怪的 makefile 中提取东西,我发现 systemtap 是一个潜在的好解决方案,所以我在这里:
使用 探测时,我可以pid()
ppid()
从新进程中正确调用nd_syscall.clone.return
,但这不包括我在目标脚本中找到的所有 vfork。
因此,当我使用 probe 时nd_syscall.vfork.return
,我发现该消息具有克隆调用者的pid()
,并且ppid()
只有,我试图获取 vfork 的返回值,但它似乎不是新的 pid(我从很多人那里看到相关的 execve 事件)。
我不能使用kprocess
,因为我不想安装调试信息。
有什么方法可以从 vfork 获得正确的 new_pid?我错过了一些参数吗?还是我使用了错误的探测功能?一定有办法,谢谢!
PS 我试过 sysdig 但它跳过了很多事件顺便说一句。
performance - 使用 SystemTap 计算 CPU 利用率
我想使用 SystemTap获取 CPU 利用率( %us
, %sy
, %id
, )。%wa
我编写了一个使用timer.profile
探针并计算处理器滴答声的脚本:
上述脚本产生的值与其他系统工具不同,例如vmstat
. 当我应用已知负载(计算大文件的校验和)时,vmstat
告诉 CPU 是 25% us
,为什么我的脚本给出 35% us
。示例适用于执行主要在内核中运行的任务 - 我的stap
脚本提供了大约 7% 到 10% 的值。
- 这种差异的原因是什么 - 这个脚本有缺陷吗?
- 如何计算等待 I/O (
wa%
) 所花费的滴答数?
linux - systemtap 访问全局用户空间目标变量
此方法支持访问全局内核变量 - “@var("varname@src/file.c")”。
当这用于用户空间探测时,系统点击仍然尝试在内核空间中查找 -
linux - Linux 运行内核探测 systemtap 脚本失败,出现语义错误:不匹配”
我有 2 个实验环境:CentOS 6.8 和 Ubuntu 16.04 都在 Virtualbox VM 中运行。
在我安装的 CentOS 上
在 Ubuntu 上我安装了:
在两个系统上我都可以成功运行:
我从systemtap指南尝试了这个.stp
脚本:
chmod +x ...
脚本并以root
用户身份运行。两个系统都报告错误,例如:
这个错误是关于什么的?是安装问题吗?我的脚本中是否存在语法错误?
非常感谢。
c - 为什么 _do_fork() 的 kretprobe 只返回一次?
当我用 fork 编写一个小脚本时,系统调用返回两个进程(每个进程一次):
如果我使用 systemtap 进行检测,我只会找到一个返回值:
(SystemTap 安装探针_do_fork
而不是克隆,但这不应该改变任何东西。)
这让我很困惑。几个相关的问题:
- 为什么系统调用只返回一次?
- 如果我正确理解了
_do_fork
代码,该过程将被克隆到函数的中间。(copy_process
和wake_up_new_task
)。后续代码不应该在两个进程中运行吗? - 系统调用之后的内核代码是否与系统调用之前的用户代码在同一线程/进程中运行?
perf - systemtap 子进程以状态退出
我正在使用“systemtap/stap”来跟踪“perf”命令,我遇到了一些问题,需要你的帮助。
情况1:
一开始它工作得很好。几秒钟后,我得到了以下错误。
案例二:
我在上面搜索了错误消息(探测开销超过了阈值)并-g --suppress-time-limits
按照建议添加了“”。我在下面。
警告:子进程以状态 1 退出
看起来参数“record -e net:net_dev_xmit usleep 1”没有传递给 perf。我是否错误地使用了“systemtap/stap”?我应该怎么办?
(请注意,上面使用的“para-callgraph.stp”复制自: https ://sourceware.org/systemtap/examples/general/para-callgraph.stp )
systemtap - 如何将 systemtap 脚本拆分为多个文件?
我正在编写一个具有明显可分离部分的中型 systemtap 脚本。我想把它分成多个文件。我看到了这样做的两种可能性,但并不理想。有官方方式还是约定?
1.手动连接并从标准输入读取脚本
2.使用导入功能
Systemtap 总是导入整个文件,所以这应该工作:
主文件
孩子.stp
c++ - 为什么 copy_to_user 会花费数百毫秒?
我有一些运行 apache trafficserver 的 linux 服务器,发现大约 1/20 的请求需要几毫秒,这比预期的要长得多(应该是 1-2 毫秒)。
通过 systemtap 跟踪后,我发现时间都花在了 linux 内核的 copy_to_user() 调用上。(接受->inet_csk_accept->move_addr_to_user->copy_to_user)
服务器负载很低(<100qps),copy_to_user() 只复制 16 个字节的数据(struct sockaddr),但花费了数百毫秒。
由于我对 systemtap 和内核跟踪技术不熟悉,我无法进一步调查原因。我检查了 cpu 使用情况,交换使用情况
感谢您的任何建议。
硬件:
- cpu: Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz
- 内存:64G
- 磁盘:11*6T硬盘
软件:
- centos6 2.6.32-696.el6.x86_64 #1 SMP 2017 年 3 月 21 日星期二 19:29:05 UTC x86_64 x86_64 x86_64 GNU/Linux
- apache trafficserver 5.3.2 配置10G内存
nginx 1.10.2,代理用户请求到trafficserver
/li>
更新:
@employee of the month 感谢您的建议,在对 __do_page_fault 添加一些探测后,我发现时间都花在了 __do_page_fault -> down_read(&mm->mmap_sem);
@Ricardo Biehl Pasquali 感谢您的建议。Apache trafficserver 在单独的线程中读取/写入硬盘。trafficserver 有 1 个线程来接受连接,88 个(每个 hdd 8 个线程)线程来阻塞读/写(缓存内容),但我不明白为什么在其他线程中阻塞读/写会导致 __do_page_fault() 的高延迟.
更新:</p>
问题解决了!根本原因是trafficserver 定期调用system() 来备份我们编写的一个古老插件中的文件。
macos - 如何在 docker for mac 的 centos 容器中使用 systemtap(stap)
当我使用 stap 时,它告诉我这个错误作为图像,我该如何解决它。