如何从子进程获取统计信息以衡量资源利用率?

时间:2016-08-30 19:09:26

标签: c++ linux performance

我觉得这必须有一个简单的答案,但我真的不知道如何处理这个问题。

对于背景,一堆东西是这样的:

Python script -> C++ binary -(fork)-> actual thing we want to measure.

基本上,我们有一个python脚本,它通过使用tmp目录并运行我们正在开发的这个网络软件堆栈的多个实例来模拟环境。该脚本调用主机二进制文件(这里不重要),然后在加载之后调用辅助二进制文件。辅助二进制文件可以传递给daemonize参数,当它执行此操作时,它以通常的方式分叉。

我们需要做的是测量守护进程的CPU利用率,但我真的不知道该怎么做。我所做的是定期读取stat文件,但由于进程守护进程,我无法使用echo $!获取其PID。使用ps aux | grep 'thing'工作正常,但我认为这给了我父进程,因为统计信息如下所示:

1472582561 9455 (nlsr) S 1 9455 9455 0 -1 4218944 394 0 0 0 13 0 0 0 20 0 2 0 909820 184770560 3851 18446744073709551615 4194304 5318592 140734694817376 140734694810512 140084250723843 0 0 16781312 0 0 0 0 17 0 0 0 0 0 0 7416544 7421528 16224256 140734694825496 140734694825524 140734694825524 140734694825962 0

我知道父进程不应该是PID1,而肯定是 utime字段,类似的应该大于13个时钟周期。这就是让我得出结论,这个过程实际上是父进程,而不是正在完成所有工作的分叉子进程。

我几乎可以修改任何必要的文件,但由于代码审查限制,设计规范等等,我必须越少地改变许多文件,越好。

1 个答案:

答案 0 :(得分:0)

  1. 可靠地获取孩子的PID

    • fork()将子项的PID返回给父项
  2. /proc/[PID]/stat

    获取CPU统计信息
    • #14 utime - 在用户代码中花费的CPU时间,以时钟滴答
    • 衡量