繁体   English   中英

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

[英]How to get stat information from a child process to measure resource utilization?

我觉得这肯定有一个简单的答案,但我真的不知道该如何处理。

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

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

本质上,我们有一个python脚本,它通过使用tmp目录并运行我们正在开发的该网络软件堆栈的多个实例来模拟环境。 该脚本调用主机二进制文件(此处不重要),然后在加载后调用帮助程序二进制文件。 可以向辅助二进制文件传递参数以进行守护进程,并且在执行此操作时,它将以通常的方式进行派生。

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

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. 可靠地获取孩子的PID

    • fork()将孩子的PID返回给父对象
  2. /proc/[PID]/stat获取CPU统计信息

    • #14 utime用户代码中花费的CPU时间,以时钟周期为单位

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM