6

在 C、Linux 3.2 中:有没有办法以编程方式收集pthread某个程序上每个已创建线程的状态的统计信息?例如,我想获取每个线程运行和处于空闲状态的时间。

4

2 回答 2

1

clock_gettime()可以返回线程特定的 CPU 时间。只需这样做:

struct timespec ts;
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);

但据我了解,这是该线程的用户和系统时间的总和。您还应该考虑手册页末尾有关 SMP 系统的警告消息。

此外,如果您不想要当前线程上的计时信息,但在某些 pthread 上,您可以clockid_t使用clock_gettime()using int pthread_getcpuclockid(pthread_t thread, clockid_t *clock_id)

于 2012-05-27T14:48:10.977 回答
1

getrusage()

编辑:为了获得空闲时间,我会从线程处于活动状态的总时间中减去系统和用户时间。

可用于探测的其他工具包括:system tap、swtrace、tprof、oprofile、perf、sysprof、ptt 等。

于 2012-05-27T15:34:09.680 回答