2

我编写了一个应用程序,需要与另一个执行相同工作的应用程序进行比较。我的是 OCaml,而另一个是 Java。

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

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

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

4

4 回答 4

4

我使用与 ygrek 相当的解决方案。只要您使用的是 Unix,它就实现语言而言是非常通用的。一个小问题是,可以用于此目的的命令top和命令在 BSD Unix(Mac OS X 派生自)和 Linux 上的工作方式都不同。ps我猜他的命令行是针对 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 的 GC 模块,但这并不能直接与 Java 程序的行为相提并论。

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

于 2010-09-16T08:36:15.670 回答
3
while : ; do ps --no-header -o %cpu,vsz,rss -p PID; sleep 1 ; done
于 2010-09-16T07:48:34.007 回答
2

您可以使用 /usr/bin/jvisualvm 监控 Java 使用情况

Activity Monitor 程序可以让您粗略估计任何常用 Unix 程序的资源使用情况。

于 2010-09-15T22:13:38.830 回答
2

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

于 2010-09-23T20:56:59.883 回答