top命令和arthas统计cpu使用率的原理

/ 默认分类 / 0 条评论 / 65浏览

最近排查问题的时候用到了arthas,基于一些监控工具,查看当前线程的cpu使用率,深入想了下,线程的cpu使用率的统计原理,这里总结一下: top 统计 CPU 使用率的基本方法 是通过计算 增量 CPU 时间与采样间隔时间的比例 来得出的。 具体过程如下:

  1. 采样CPU时间:top 会定期读取每个进程的 CPU 时间,这包括进程在用户态和内核态运行的时间。 ○ 用户态时间(user):CPU在用户空间运行应用程序的时间。 ○ 内核态时间(system):CPU在内核空间为应用程序执行系统调用的时间。
  2. 计算增量时间:在每次采样时,top 记录下每个线程或进程的累计 CPU 时间(utime 和 stime)。在下次采样时,它会再次读取这些时间,然后计算自上次采样以来的 增量 CPU 时间,即 当前CPU时间 - 上次采样时的CPU时间。
  3. 采样间隔时间:top 也会记录两个采样点之间的时间间隔,通常称为采样间隔时间。
  4. 计算 CPU 使用率: ○ CPU 使用率 = (增量 CPU 时间 / 采样间隔时间) × 100% ○ 这个比例表示,在过去的采样间隔内,进程/线程占用的 CPU 时间与整个时间间隔的比率。 假设某进程在第一个采样点时的 CPU 时间是 100秒,下一个采样点时 CPU 时间是 102秒。采样间隔时间是 1秒。 ● 增量 CPU 时间 = 102 - 100 = 2秒 ● 采样间隔时间 = 1秒 ● CPU 使用率 = (2 / 1) × 100% = 200% 这意味着在这段采样间隔中,这个进程的 CPU 使用率是 200%,系统有多核,进程可能同时在多个核上运行。

另外,alibaba开源的arthas的线程cpu使用率统计原理也是类似的,具体可以参考下面的文档: https://arthas.aliyun.com/doc/thread.html#%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E8%AF%B4%E6%98%8E