我有一些间歇性的性能问题,我想通过perf top
来捕获。这个问题是断断续续的,因此我想编写一个在问题发生时运行perf top
的脚本,以便我可以保存数据并在以后查看。
我似乎无法弄清楚如何perf top
将其输出保存到文件中,它似乎要求以交互方式运行。到目前为止,这是我尝试过的:
# timeout 10 perf top --stdio -E 20 > 'perf-top'
这不会杀死perf,只是让它永远在后台运行,直到我创建另一个控制台会话,找到PID并杀死它为止。
# timeout --signal=9 10 perf top --stdio -E 20 > 'perf-top'
这会在预期的10秒内杀死性能,但是输出不会写入我指定的文件中。
是否需要某种特殊方式来运行此命令?如果我从交互式ssh会话中运行它,则它可以工作,但是我真的很希望能够从脚本中运行它。我正在尝试将其与其他一些度量标准收集程序一起纳入一项艰巨的任务。
答案 0 :(得分:2)
SIGKILL(9
)不可捕获,因此perf
无法刷新任何缓冲的输出。
使用任何其他信号,以便perf
在接收到该信号并写入输出后可以对其进行清理。
如果默认的SIGTERM
不起作用,请尝试使用SIGHUP,SIGINT或其他工具。
timeout --signal=INT
timeout 10 perf top --stdio -E 20 > perf-top
(使用默认的SIGTERM)在我的Arch Linux桌面上对我有效(作为非root用户)。 perf version 5.0.g1c163f4