如何找到进程的空闲时间
How to find the idle time of a process
我有一个过程,在早期的版本中需要一些时间。现在,相同的过程在当前版本中花费了更多的时间。但是与之前相比,代码没有变化。我观察到的一个现象是,与早期版本相比,服务器上有一些其他进程正在消耗高cpu。所以我怀疑我的进程没有得到cpu时间,这就是为什么它需要更多的时间。但是我需要证明这个进程大部分时间都在等待(空闲)。为了做到这一点,我想用getrusage()
。但是我不确定如何使用它来计算进程空闲时间。谁能告诉我一个简单的例子,关于如何使用getrusage
专门计算进程的空闲时间。
您可以计算进程的执行时间,而不是计算进程的空闲时间。
在符合较新的POSIX标准的操作系统(即Linux)中,您可以使用clock_gettime
函数轻松地完成此操作:
CLOCK_REALTIME
全系统实时时钟。CLOCK_PROCESS_CPUTIME_ID
来自CPU的高分辨率每个进程计时器。CLOCK_THREAD_CPUTIME_ID
线程特定的cpu时间时钟。
您可以使用CLOCK_REALTIME
来获取时钟时间,并使用程序开始和结束时返回的时间之间的差值来了解程序运行所需的时间(包括空闲时间)。使用CLOCK_PROCESS_CPUTIME_ID
,您可以以类似的方式精确测量进程在CPU上运行的花费。使用CLOCK_THREAD_CPUTIME_ID
,您甚至可以单独获得每个线程的执行时间。
注意:如果进程/线程从一个CPU迁移到另一个CPU, CLOCK_*_CPUTIME_ID
可能会不一致。记住这一点。如果发生这种情况,您可以尝试将进程或其线程绑定到特定的cpu。
作为旁注,time(1)
为您提供有关进程执行时间的信息,因此,如果挂钟时间足够大,例如可以通过您的手表测量,您也可以使用此工具。
注:别忘了链接-lrt
- 使计时器在C++进程中的特定时间关闭,以便同步两个进程
- 仅获取进程使用的时间
- 我想获取我在C++中创建的每个进程的 PID,并在特定时间后终止每个进程
- 分叉程序在<defunct>一段时间后给出进程
- 如何获取正在运行的进程的启动时间
- 如何使用C++在Linux中测量切换进程上下文的时间
- 如何生成一个只存在给定持续时间的进程
- rusage的进程/线程的Cpu时间不可能
- Linux 进程调度延迟了很长时间
- 如何在本机C++中获取进程名称和日期时间戳
- 分叉子进程所花费的时间
- C、 所有平台中进程的C++CPU使用率和内存使用率+当前时间的可用网络下行链路带宽
- 测量子进程的时间
- 最小化进程之间的上下文切换时间
- 如何知道进程的空闲时间
- c++通过exec函数杀死子进程,但不杀死父进程和正常运行时间
- 如何找到进程的空闲时间
- 在OSX中使用C / c++获取进程创建日期时间
- 如何在运行时监控进程的资源使用情况(时间、内存)?
- 如何用c++程序在OS X上获取进程启动时间