【问题标题】:C++ figure out CPU/Memory usageC++ 计算 CPU/内存使用情况
【发布时间】:2011-01-17 15:30:50
【问题描述】:

我有一个名为 ./blah 的 C++ 应用程序(我有它的源代码)

当我运行 ./blah

我可以运行 "top" 并查看 "./blah" 正在使用多少内存和 cpu。

现在,“./blah”本身是否可以访问该信息? IE。当我运行 ./blah 时,我希望它每秒转储它的 CPU 和内存使用情况。我应该使用哪个库来执行此操作?

我在 MacOSX 上;但我更喜欢适用于 Linux 的解决方案。

谢谢!

【问题讨论】:

  • Mac OSX 和 Linux 都符合 Posix,IIRC。您不会找到 C++ 标准解决方案,但 Posix 标准解决方案应该适合您。我不知道这些电话,但如果 Posix 标准库中没有这些信息,我会感到惊讶。

标签: c++ linux macos resources


【解决方案1】:

你想要getrusage()。来自man page

int getrusage(int who, struct rusage *r_usage);

getrusage() 返回描述当前进程或其所有终止子进程所使用的资源的信息。 who 参数是 RUSAGE_SELFRUSAGE_CHILDRENr_usage 指向的缓冲区将使用以下结构填充:

struct rusage {
         struct timeval ru_utime; /* user time used */
         struct timeval ru_stime; /* system time used */
         long ru_maxrss;          /* integral max resident set size */
         long ru_ixrss;           /* integral shared text memory size */
         long ru_idrss;           /* integral unshared data size */
         long ru_isrss;           /* integral unshared stack size */
         long ru_minflt;          /* page reclaims */
         long ru_majflt;          /* page faults */
         long ru_nswap;           /* swaps */
         long ru_inblock;         /* block input operations */
         long ru_oublock;         /* block output operations */
         long ru_msgsnd;          /* messages sent */
         long ru_msgrcv;          /* messages received */
         long ru_nsignals;        /* signals received */
         long ru_nvcsw;           /* voluntary context switches */
         long ru_nivcsw;          /* involuntary context switches */
 };

【讨论】:

  • 愚蠢的问题:我如何从中获得 % cpu?
  • 您知道用户/系统花费了多少时间,除以实际时间,这就是您使用的 CPU 时间,对吧?
  • 真的是%cpu的定义吗?看起来很简单。
  • @anon,你的定义是什么?
  • 已修复,感谢@FelixJassler 的提示。
【解决方案2】:

Linux 在以下位置提供此信息:

/proc/<pid>/stat

您可以通过以下方式获取当前 pid:

getpid()

返回 pid_t。

这是我发现以合理格式显示该信息的一段代码:http://brokestream.com/procstat.html

我不知道这是否适用于 Mac OSX。

编辑:Mac OS X 没有 procfs 文件系统,因此这不适用于 Mac OSX,抱歉!

【讨论】:

  • 恐怕在 OS X 上没有/proc
  • @Carl 谢谢,在我看到你的评论之前,我做了一个快速的谷歌并编辑了它。下面也有更好的解决方案。
【解决方案3】:

如果您有兴趣使用这些信息来分析您的应用程序,您可以在 OSX 上使用 dtrace:

http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html

【讨论】:

    猜你喜欢
    • 2019-07-18
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2021-05-03
    • 2017-10-15
    相关资源
    最近更新 更多