我想显示脚本的完成时间。
我目前做的是——
#!/bin/bash
date ## echo the date at start
# the script contents
date ## echo the date at end
Run Code Online (Sandbox Code Playgroud)
这只是显示脚本开始和结束的时间。是否可以显示像处理器时间/ io 时间等细粒度的输出?
这是一个简单的问题,但我第一次不得不真正解决它:找到哪些特定文件/inode 是大多数 I/O 的目标。我希望能够获得一般系统概述,但如果我必须提供 PID 或 TID,我可以接受。
我想不用strace对弹出的程序做任何操作iotop。最好使用与iotop按文件逐项列出的工具相同的工具。我可以lsof用来查看邮递员打开了哪些文件,但它不指示哪个文件正在接收 I/O 或接收了多少。
我在其他地方看到有人建议使用它,auditd但我不想这样做,因为它会将信息放入我们的审计文件中,我们将其用于其他目的,这似乎是我应该能够研究的问题通过这种方式。
我现在遇到的具体问题是 LVM 快照填充太快。我已经解决了这个问题,但希望能够以这种方式修复它,而不是仅仅ls对所有打开的文件描述符进行分析/proc/<pid>/fd以查看哪个增长最快。
有人可以指导我使用命令来测量 LINUX 上的 TLB 未命中吗?当 TLB 未命中时,是否可以考虑(或近似)次要页面错误?
我perf record -g在 x86-64 Linux 上使用来分析程序。libc 或 libstdc++ 中的几个符号0作为父符号:例如__GI___strcmp_ssse3(libc) 和strcmp@plt(libstdc++)。(我实际上可以在调试器中打破这些符号并获得回溯。)
我很想知道这些函数的主要调用者是什么,以及为什么没有记录它们。这是因为 libc 和 libstdc++ 在 x86_64 上没有帧指针吗?而且,更实际的是,有没有办法解决这个问题?
是否可以检查给定的程序是否是使用 GNU gprof 工具编译的,即“-pg”标志传递给编译器和链接器,而不运行它来检查它是否会生成gmon.out文件?
我有几个在 shell 脚本中执行的程序:
./myprogram1
./myprogram2
...
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过编辑源代码来分析每个单独的程序,但我想知道是否有一种方法可以通过分析脚本本身来测量执行的总时间。有没有可以用于此目的的计时器程序?如果是这样,它的测量精度如何?
我有一个运行在中等速度 ARMv7 处理器上的 2.6.35 PREEMPT 内核。大约每 100 - 125 秒一次,某些事情会导致内核无法足够快地处理某些与音频相关的驱动程序以避免欠载。滞留时间通常在 15-30 毫秒的范围内,但也可能更长。目前尚不清楚这种阻塞是否完全在内核中发生,还是可能与以实时优先级 (SCHED_RR, 2) 运行的用户进程的调度有关。
我的猜测是有一个(至少一个)驱动程序在抢占时表现不佳。
用户进程的一些 strace 输出说明了正常和异常行为的某些方面,尽管我不确定如何解释各种时间报告?
正常情况:
0.000518 poll([{fd=10, events=POLLIN|POLLERR|POLLNVAL, revents=POLLIN}], 1, 3415) = 1
0.010202 poll([{fd=10, events=POLLIN|POLLERR|POLLNVAL}, {fd=6, events=POLLOUT|POLLERR|POLLNVAL, revents=POLLOUT}], 2, 3404) = 1
0.000585 poll([{fd=10, events=POLLIN|POLLERR|POLLNVAL}, {fd=6, events=POLLOUT|POLLERR|POLLNVAL, revents=POLLOUT}], 2, 3404) = 1
0.000302 poll([{fd=10, events=POLLIN|POLLERR|POLLNVAL, revents=POLLIN}], 1, 3404) = 1
0.010706 poll([{fd=10, events=POLLIN|POLLERR|POLLNVAL}, {fd=6, events=POLLOUT|POLLERR|POLLNVAL, revents=POLLOUT}], 2, 3393) = 1
0.000480 poll([{fd=10, events=POLLIN|POLLERR|POLLNVAL}, {fd=6, events=POLLOUT|POLLERR|POLLNVAL, revents=POLLOUT}], 2, 3392) = 1
在 fd6 上轮询输出时不会发生阻塞,当只轮询 fd10 …
我想使用该perf实用程序为我的程序收集测量值。它在带有 Debian 9 的共享集群机器上运行,默认情况下 /proc/sys/kernel/perf_event_paranoid设置为 3,因此不允许我收集测量值。在更改它之前,我想知道这意味着什么。
是否只是安全性允许其他用户分析由其他用途运行的内容并因此获得洞察力?我们不关心这个,因为无论如何它都是用户的内部圈子。或者也许是性能,这也会影响其他人?
我正在为 Linux 寻找一些好的分析工具,比如OProfile。我想看到的是操作系统如何为不同的应用程序和工作负载管理中断、缓存、读/写等(操作系统内部的许多其他复杂操作)。当然,我可以选择一堆不同的系统监控工具,例如 sar、iostat、vmstat 等等,但是使用不同类型的工具并同步所有数据是一件很痛苦的事情,尤其是在监控缓存行、中断等时。
Oprofile 对我想要的内容进行了很好的概述和详细分析,但有时它无法在最新的内核上运行。我不知道为什么。但无论如何,我想知道是否有一个不错的替代方案?
我正在寻找一种方法来分析单个进程,包括 CPU、I/O、随时间推移的内存使用以及可选的系统调用所花费的时间。
我已经知道callgrind提供一些基本的分析功能,但只有调试信息,缺少其他大部分提到的信息。
我知道strace -c提供有关所有系统调用及其所需 CPU 时间的摘要。
我知道几个与 IO 相关的工具,例如(io)top, iostat,vmstat但它们都缺乏有关单个进程的详细统计信息。还/proc/$PID/io提供了有关单个进程的一些 IO 统计信息,但我必须以固定的时间间隔读取它,以便随时间收集 IO 信息。
我知道pidstat提供 CPU 负载、IO 统计数据和内存利用率,但没有系统调用,只是在高粒度上而不是随着时间的推移。
当然,人们可以结合几个所描述的工具来随着时间的推移收集这些信息,但缺乏高粒度,因此遗漏了重要信息。我正在寻找的是一个单一的工具,提供所有(或至少大部分)提到的信息,最好是随着时间的推移。有这样的工具吗?
profiling ×10
linux ×4
monitoring ×2
perf ×2
bash ×1
elf ×1
executable ×1
glibc ×1
io ×1
kernel ×1
linux-kernel ×1
load ×1
process ×1
shell-script ×1
software-rec ×1
time ×1