Ocaml:获取进程的CPU使用率

时间:2011-07-13 22:25:16

标签: ocaml cpu-usage background-process

我想做什么

我有一个计算密集型的OCaml应用程序,我希望它在后台运行而不会影响正常的计算机使用。我想向用户提供两个选项:

(1)应用程序仅在CPU使用率几乎为0%时运行;

(2)应用程序仅使用“免费”处理能力(例如,如果其他进程加起来为100%,则OCaml应用程序暂停;如果其他进程几乎为0%,则OCaml应用程序没有限制;如果其他过程加起来,比如50%,然后OCaml将使用高达50%)。

一些想法

我的想法是检查代码中各个检查点的CPU使用情况,并在必要时暂停执行。

在(1)中,我们只检查CPU是否低于2%,如果不是,则暂停直到它再次低于2%。

在(2)中,事情变得棘手。由于当没有限制时,应用程序总是消耗100%的CPU,并且检查点将非常频繁,将CPU使用率降低到一半,我只需要在每个检查点将其延迟到检查点之间的时间。如果检查点频繁,这就类似于使用50%的CPU,我会说。对于其他百分比,我们可以通过暂停适当的时间段来做类似的事情。然而,这看起来非常人为,充满了开销,最重要的是,我不确定它是否真的能满足我的需求。更好的替代方法是在应用程序开始时使用一些适当的整数调用Unix.nice n。我认为设置n=15可能是正确的。

我的问题

(Q1)我如何从我的OCaml应用程序中了解应用程序进程的CPU使用情况? (我想用OCaml函数做这个,而不是在命令行上调用“ps”或类似的东西......)

(Q2)你认为我的想法存在问题(2)。改变过程的好处有哪些实际差异?

(Q3)您对(2)还有其他建议吗?

2 个答案:

答案 0 :(得分:4)

获取PID然后解析/proc/<PID>/stat的内容以获取有关您的进程的信息,并/proc/stat获取全局CPU信息。他们都有一堆统计数据可供您决定何时开始工作以及何时入睡。请man proc查看所有字段的文档(长)。有良好信息的相关问题:stackoverflow.com/questions/1420426

设定好感很容易,也很可靠。自己做事工作要多得多,但可能会给你更多的控制权。如果你的实际目标只是作为一个后台任务运行,我会很高兴并完成它。

答案 1 :(得分:4)

使用Caml的Unix库定期捕获您的CPU时间和经过的时间。您的CPU使用率是该比率。试试Unix.gettimeofdayUnix.times。注:您需要使用-lunix选项进行关联。

我也会在nice下运行该过程并完成它。

相关问题