【发布时间】:2009-04-18 21:32:47
【问题描述】:
假设我想分析系统中许多应用程序中使用的单个库的使用情况。我只接受统计资料,而不是准确的资料(但那也不错)。
我不想做的是用分析支持重新编译每个正在运行的程序。我希望定期或按需将分析信息转储到某个文件中。如果使用应用程序名称或 pid 来分解统计信息,那就太好了。
现在有什么方法可以实现吗?
示例用法:使用来自正在运行的系统的数据分析 glib 库。
【问题讨论】:
假设我想分析系统中许多应用程序中使用的单个库的使用情况。我只接受统计资料,而不是准确的资料(但那也不错)。
我不想做的是用分析支持重新编译每个正在运行的程序。我希望定期或按需将分析信息转储到某个文件中。如果使用应用程序名称或 pid 来分解统计信息,那就太好了。
现在有什么方法可以实现吗?
示例用法:使用来自正在运行的系统的数据分析 glib 库。
【问题讨论】:
看看oprofile。我认为它完全符合您的要求。
Oprofile 使用硬件计数器采样来分析代码,您可以自定义要在哪个计数器上采样(例如如果您不想要时间配置文件,您可以在浮点上采样指令计数器并查看代码中执行最多 FP 工作的部分)。对于时间配置文件,速率约为每秒 2000 个样本,因此开销非常低。
生成的摘要数据会告诉您您花费大部分时间的应用程序、加载模块和符号(如果您有符号信息)。您还可以选择分别分析内核空间和用户空间,如果需要,可以使用调用路径信息。最新版本的 oprofile 甚至还支持分析 JITed 代码,因此非常全面。
【讨论】: