2

我注意到我的代码运行的 10% 是系统空间。但是我不知道哪个系统调用。不过,我怀疑它要么必须做文件,要么必须做时间戳。

有没有工具可以找出哪些系统调用是罪魁祸首?另外,我想知道调用(和被调用者)的频率(和位置)。

我在 AS3

谢谢

4

6 回答 6

6

两者都stracetruss帮助您查看哪些系统调用需要时间。两个有用的选项strace是:

  1. -T显示每个系统调用所花费的时间,
  2. -c将系统调用计数、调用、错误计数汇总为一个表。

虽然这两个选项是相互排斥的。

您可能需要一个完整的系统分析工具,以允许您更详细地分析内核。 如果您的平台上有DTrace ,它可能是最好的。

按平台,这里有一些选项:

DTrace 甚至可以帮助您使用 pid 提供程序分析您的 C/C++ 代码,例如,请参见此处

于 2009-10-19T14:43:49.820 回答
3

如果您在 Linux 上,请查看 strace。

如果您在其他 Unix 上,请查看 truss 是否可用。

于 2009-10-19T14:29:46.180 回答
1

如果你的系统有它,那么truss命令应该做你想做的事。

于 2009-10-19T14:30:47.987 回答
1

如果是 10%,则尝试此方法30 个样本。您将看到大约 3 个样本的准确调用,可能是 2 个,也可能是 4 个。

于 2009-10-19T21:49:37.487 回答
0

再次在 Linux 上,您可以尝试使用oprofile分析器。确保您有可用于 libc 和内核的调试符号(许多发行版在单独的包中都有这些符号)。它描述了整个系统,而不是(仅)单个进程。我从中得到了宝贵的信息。

于 2009-10-19T16:05:13.387 回答
0

在 Solaris 上,您可以使用 dtrace。

于 2009-11-29T01:45:57.020 回答