跳转至

cpu

CPU占用率(%CPU)通常表示某个进程或线程在一段时间内使用的CPU时间占整个CPU总时间的百分比。在多核系统中,%CPU可以超过100%,因为这个值是所有CPU核心上使用的CPU时间的总和。 如果一个进程或线程在一个核心上占用了100%的CPU时间,那么它完全使用了该核心的资源。如果一个进程在两个核心上各占用50%的时间,总占用率将显示为100%。

1.查看程序占用了多少cpu核心

Bash
1
top

2. 使用taskset绑定线程到特定cpu核心

taskset命令允许你将进程或线程绑定到特定的CPU核心上,以控制其在特定核心上运行。

  • 获取线程ID(TID):

    你可以在tophtop中找到线程的PID,这就是线程ID(TID)。

  • 使用taskset命令查看和设置CPU亲和性:

    taskset -cp <TID>

  • 这将显示指定线程当前绑定的CPU核心。要将线程绑定到特定的核心,例如核心0和核心1,可以使用:

    taskset -cp 0,1 <TID> 例如 :

    Bash
    1
    taskset -c 0,4 /home/xujg/UAV-VisionLoc-Deploy/cpp/install/UAV-VisionLoc-C_Linux/UAV-VisionLoc-C /home/xujg/UAV-VisionLoc-Deploy/cpp/config.yaml
    

3. 使用pidstat查看每个核心的占用情况

pidstatsysstat工具包中的一个工具,它可以详细显示每个进程的CPU核心使用情况。

  1. 安装 sysstat 工具包(如果尚未安装): sudo apt-get install sysstat

  2. 使用 pidstat 查看每个核心的使用情况:

    pidstat -p 12172 -t -u 1

    • -p 12172 指定进程ID。
    • -t 显示线程的信息。
    • -u 显示CPU使用率。
    • 1 表示每秒更新一次。

    这将显示该进程及其线程在每个CPU核心上的使用率。

CPU占用率(%CPU)和占用时间之间有直接的关系。%CPU实际上反映了进程或线程在一段时间内使用了多少CPU资源。下面我详细解释两者之间的关系:

4. CPU占用率的定义

  • CPU占用率(%CPU 是一个时间平均值,表示在一个给定的时间段内,进程或线程使用了多少CPU时间。
  • 占用时间 是进程或线程在这段时间内实际在CPU上运行的时间。

5. 占用率与占用时间的关系

  • 单核系统

    • 在单核系统中,如果一个进程在1秒内完全占用了CPU,那么它的%CPU将是100%。
    • 如果进程在1秒内只运行了0.5秒,那么它的%CPU将是50%。
    • 多核系统

    • 在多核系统中,%CPU可以超过100%。例如,在一个四核系统中,如果一个进程在1秒内占用了两个核心的全部时间,它的%CPU将是200%。

6. 计算%CPU的公式

对于一个进程或线程,%CPU通常可以用以下方式近似计算:

%CPU = (使用的CPU时间 / 监测间隔时间) * 100

例如:

  • 如果一个进程在一个时间间隔(例如1秒)内使用了0.5秒的CPU时间,并且是单核系统,那么它的%CPU为:

    %CPU = (0.5秒 / 1秒) * 100 = 50%

  • 在多核系统中,如果这个时间是分布在两个核心上的(例如每个核心0.25秒),那么总的%CPU将会是:

    %CPU = ((0.25秒 + 0.25秒) / 1秒) * 100 = 50%

  • 如果进程在1秒内完全占用了两个核心,每个核心1秒,那么它的%CPU为:

    %CPU = (1秒 + 1秒) / 1秒 * 100 = 200%

7. 示例分析:

  • 在你的数据中,主进程的%CPU显示为105%-108%。假设你监测的时间间隔为1秒,这意味着在1秒内,主进程及其所有线程总共使用了1.05到1.08秒的CPU时间。
  • 如果其中一部分时间是在核心4上运行,另一部分时间是在核心3上运行,这就导致了总%CPU超过100%。

8. 为什么多核系统会出现超过100%的占用率

在多核系统中,%CPU可以反映进程或线程在多个核心上并行运行的时间总和。例如:

- 如果一个进程有多个线程,并且这些线程在不同的核心上并行运行,它们的CPU使用时间可以叠加,这就可能导致超过100%的%CPU

  • CPU占用率(%CPU 是通过计算进程或线程在给定时间间隔内使用的CPU时间与总时间的比率得出的。
  • 在多核系统中,这个比率可以超过100%,因为多个核心可以同时执行进程的不同部分。
  • 占用时间 直接影响到%CPU的计算:占用时间越长,%CPU越高。