我编写了一个需要将其与另一份工作的应用程序进行比较。我在OCAML中,而另一个在Java中。

我想在程序上进行两次运行,并在这些执行过程中监视RAM使用情况。这两个程序都确实是内存和CPU密集的,因此我将拥有足够的数据来比较它们,但我不知道如何进行比较。

我知道,对于用不同语言编写的基准应用程序并不是有意义的,但是是否有一个工具可以在时间期间监视程序的RAM使用情况,这可能是提供数据集或图形的结果?

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

有帮助吗?

解决方案

我使用的解决方案与Ygrek的解决方案相当。只要您使用UNIX,就实现语言而言,它是非常普遍的。一个小问题是命令 topps 这两者都可以用于此目的都在BSD Unix(Mac OS X衍生)和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的GC模块, ,但这与Java程序的行为直接相提并论。

编辑为添加:在涉及GC的地方,内存开销与CPU时间间接费用之间存在权衡。 GC可以更加努力地使死块更快地可用,从而使记忆消耗降低。如果您发现这很难比较您的两个程序,则可以调整OCAML的GC以使其使用与Java GC相同的权衡。这是在GC模块中记录的。我希望Java也可以调整此设置。

其他提示

while : ; do ps --no-header -o %cpu,vsz,rss -p PID; sleep 1 ; done

您可以使用/usr/bin/jvisualvm监视Java使用率

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top