【问题标题】:My Perl program Stas我的 Perl 程序
【发布时间】:2011-06-16 12:49:09
【问题描述】:

我需要您的帮助来实现一些东西,以在 perl 程序执行期间或执行结束时监控 CPU/MEM 使用情况。

想象一个每 N 分钟运行一次的程序由另一个 Perl 程序启动,后者的执行时间可以从几秒到 1 分钟不等。如何获取执行此程序导致的 CPU/MEM 使用率。

一些要求是:

  • 监控应该尽可能少地干扰 尽可能与执行 程序。
  • 监控应至少使用 系统资源
  • 尽可能独立于操作系统。应该 在 Linux、Win32、HP-UX、Solaris、 艾克斯。好的,但让我们先关注 Linux。

我曾想过一些方法:

  1. 实现我自己的 Devel::MyProfiler 并使用 -d 运行程序 “选项”。 (例如:$ perl -dMyProfiler 程序.pl)
  2. 实现获取统计信息的包装器 每 N 秒从 /proc/pid 或 "$ ps aux",并获取平均统计信息 在程序结束时
  3. 实现一个并行程序 每 N 秒生成一个“$ ps aux”
  4. 使用进程跟踪工具!!
  5. ???

任何提示都会有所帮助!!!

注意:这个问题也发布在http://perlmonks.com/?node_id=909934

Tks,

古尔登

【问题讨论】:

标签: perl statistics cpu profile


【解决方案1】:

分析器或跟踪工具可能是解决此问题的错误方法,因为它会对您正在运行的程序产生性能(和内存使用)影响。可能不是你想要的。

大多数 UNIX 操作系统都支持像 getrusage() 这样的系统调用,它可以让您获得当前进程或子进程的资源利用率统计信息。在Unix::Getrusage 中有一个 Perl 接口;或者,大多数 UNIX 系统都有一个 time 实用程序和/或内置 shell,可以收集有关子进程的统计信息。

Windows 对我来说是一个黑盒子,所以我不确定它是否有任何等价物。

【讨论】:

    【解决方案2】:

    如果你确实想要分析看看 http://open.blogs.nytimes.com/2008/03/05/the-new-york-times-perl-profiler

    开销是合理的。内存映射非常有用。

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 2011-05-21
      • 2010-09-15
      • 2011-01-06
      • 2011-12-22
      • 2014-06-21
      • 1970-01-01
      • 2016-11-03
      • 2020-08-18
      相关资源
      最近更新 更多