cpu¶
CPU占用率(%CPU)通常表示某个进程或线程在一段时间内使用的CPU时间占整个CPU总时间的百分比。在多核系统中,%CPU可以超过100%,因为这个值是所有CPU核心上使用的CPU时间的总和。 如果一个进程或线程在一个核心上占用了100%的CPU时间,那么它完全使用了该核心的资源。如果一个进程在两个核心上各占用50%的时间,总占用率将显示为100%。
1.查看程序占用了多少cpu核心¶
Bash | |
---|---|
1 |
|
2. 使用taskset绑定线程到特定cpu核心¶
taskset
命令允许你将进程或线程绑定到特定的CPU核心上,以控制其在特定核心上运行。
-
获取线程ID(
TID
):你可以在
top
或htop
中找到线程的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查看每个核心的占用情况¶
pidstat
是sysstat
工具包中的一个工具,它可以详细显示每个进程的CPU核心使用情况。
-
安装
sysstat
工具包(如果尚未安装):sudo apt-get install sysstat
-
使用
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%。
- 在单核系统中,如果一个进程在1秒内完全占用了CPU,那么它的
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
越高。