【发布时间】:2010-12-14 22:58:52
【问题描述】:
我想知道我的应用程序在执行时使用了每个内核的 CPU 时间,以及程序结束所需的时间长度。对于后者,我使用 linux“时间”命令。对于前者,我认为我必须使用“mpstat”之类的东西。但是我希望 mpstat 仅在我的应用程序执行期间生成一些日志,我不知道是否可以这样做。谁能帮我解决这个问题?
【问题讨论】:
我想知道我的应用程序在执行时使用了每个内核的 CPU 时间,以及程序结束所需的时间长度。对于后者,我使用 linux“时间”命令。对于前者,我认为我必须使用“mpstat”之类的东西。但是我希望 mpstat 仅在我的应用程序执行期间生成一些日志,我不知道是否可以这样做。谁能帮我解决这个问题?
【问题讨论】:
我会编写一个包装脚本来启动您的应用程序,该脚本会在您的应用程序启动之前为您启动和停止 mpstat,并在它退出后立即终止它。
在这个快速示例中,我们启动后台的 mpstat,并将其 stdout/err 重定向到日志文件。然后,我们使用标准“时间”启动您的应用程序(无论您在日志文件名称后的命令行中传递什么)命令.. 最后,一旦应用程序返回/退出,我们就会终止后台 mpstat。你当然可以使用任何你喜欢的命令行参数来启动 mpstat。这里我们只是用 1 秒的时间来启动它,并没有结束条件。
$ cat test.sh
mpstat 1 2>&1 > $1 &
pid=$!
shift
time $*
kill $pid
$ ./test.sh logfile.log sleep 5
real 0m5.005s
user 0m0.004s
sys 0m0.000s
$ cat logfile.log
Linux 2.6.31-15-generic-pae (-desktop) 12/03/2009 _i686_ (4 CPU)
12:55:58 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
12:55:59 PM all 1.25 0.00 1.75 0.00 0.00 0.00 0.00 0.00 96.99
12:56:00 PM all 0.25 0.00 0.25 0.00 0.00 0.00 0.00 0.00 99.51
12:56:01 PM all 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
12:56:02 PM all 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 99.50
12:56:03 PM all 0.49 0.00 0.49 0.00 0.00 0.00 0.00 0.00 99.02
【讨论】: