请问 perf record 生成程序运行统计信息(排查 CPU 占用过高)只能通过 perf ./test 启动程序,还是可以直接对正在运行的程序进行分析呢?

2017-11-10 11:27:26 +08:00
 jimy1

小弟维护的一个程序在客户现场运行占用 CPU 过高(几百上千),请问怎么能不重启这个程序就能大概分析出耗费 CPU 的大概代码段?谢谢了

1998 次点击
所在节点    C
5 条回复
detailyang
2017-11-10 11:34:20 +08:00
cpu 利用率高是一种非常容易优化的行为(复现条件),你可以利用成熟的 linux 跟踪工具 stap 和 perf 等来进行在线活体分析,你的场景下,建议使用 perf, 方便安装。你可以通过 `perf record -F 99 -p 13204 -g -- sleep 30` 来采样 on-cpu 的热点函数,或者 perf top -p 13204 直接进行观测,注意跟踪工具只能做到 C-Land 级别的跟踪,更上一层的虚拟机级别的需要自己额外实现。
jimy1
2017-11-10 11:39:21 +08:00
谢谢 detailyang
chunk
2017-11-10 12:02:28 +08:00
我记得 perf 可以直接查看运行中的进程的 https://perf.wiki.kernel.org/index.php/Tutorial#Attaching_to_a_running_process
Mirana
2017-11-10 12:18:04 +08:00
perf top -p <pid>
gouchaoer
2017-11-10 12:24:12 +08:00
perf 查看调用栈对不同的语言有的可能看不到,建议你看看: https://huoding.com/2016/08/18/531

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/405216

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX