代码之家  ›  专栏  ›  技术社区  ›  Jack

监视占用RAM的工具

  •  2
  • Jack  · 技术社区  · 14 年前

    我写了一个应用程序,需要与另一个做同样工作的应用程序进行比较。我的是OCAML,而另一个是Java。

    我想在程序上运行两次,并在这些执行所经过的时间内监视RAM的使用情况。这两个程序都是内存和CPU密集型的,所以我有足够的数据来比较它们,但我不知道怎么做。

    我知道对用不同语言编写的应用程序进行基准测试没有多大意义,但是是否有一个工具可以简单地监视程序在某段时间内的RAM使用情况,从而提供数据集或图表?

    编辑:理想的操作系统是Mac OS X或Unix

    4 回复  |  直到 14 年前
        1
  •  4
  •   Pascal Cuoq    14 年前

    我使用的解决方案与YGREK类似。 在实现语言方面,它是非常通用的,只要您使用的是Unix。 一个小问题是命令 top ps 这两种方法都可以用于此目的,它们在BSD-Unix(MacOSX源于此)和Linux上的工作方式都不同。我猜他的命令行是针对Linux的。

    对于Mac OS X,我使用了:

    top -s 10 -l 10000 | grep <PID or process name>
    

    对于Linux:

    top -d 10 -n 10000 | grep <PID or process name>
    

    10是以秒为单位的采样周期。

    如果要从OCAML的GC获取信息,可以使用 OCaml's GC module ,但这与Java程序的行为没有直接的可比性。

    编辑后添加:在涉及GC的地方,内存开销和CPU时间开销之间存在权衡。GC可以更努力地更快地使死区可用,从而降低内存消耗。如果你发现这很难比较你的两个程序,你可以调整OCaml的GC,使其使用与Java GC相同的折衷。这记录在GC模块中。我希望Java也允许这个设置被调整。

        2
  •  3
  •   ygrek    14 年前
    while : ; do ps --no-header -o %cpu,vsz,rss -p PID; sleep 1 ; done
    
        3
  •  2
  •   Thorbjørn Ravn Andersen    14 年前

    可以使用/Ur/bin /jVisalalvm监视Java使用情况

    活动监视器程序可以粗略估计任何常用的UNIX程序的资源使用情况。

        4
  •  2
  •   Gaius    14 年前

    Valgrind的 Massif 工具可以为本机代码执行此操作。