admin 管理员组文章数量: 1184232
一、cpu相关概念
1、CPU物理个数:
主板上实际插入的cpu数量 ,可以数不重复的 physical id 有几个(physical id)
[root@ufo ~]# grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l 1
2、每个CPU的核数:
单块CPU上面能处理数据的芯片组的数量,如双核、四核等 (cpu cores)
[root@ufo ~]# grep 'cpu cores' /proc/cpuinfo|uniq|awk -F ':' '{print $2}'
43、逻辑CPU个数:
一般情况下,逻辑cpu数=物理CPU个数×每颗核数
如果不相等的话,则表示服务器的CPU支持 超线程技术 ( HT 简单来说,它可使处理器中的1颗内核像2 颗内核那样在操作系统中发挥作用。这样一来,操作系统可使用的执行资源扩大了一倍,大幅提高了系统的整体性能,此时 逻辑cpu数=物理CPU个数×每颗核数x2 )
[root@ufo ~]# cat /proc/cpuinfo| grep "processor"|wc -l 8
总核数 = CPU物理个数 x 每个CPU的核数
总逻辑CPU数 = 物理CPU个数 x 每颗物理CPU的核数 x 超线程数
二、cpu为什么会超过100% ?
通过top命令进行查看进程的cpu使用率。有时候就会发现某个进程的cpu使用率超过了100%
top - 10:12:55 up 3 days, 13:09, 1 user, load average: 1.19, 0.87, 1.43 Tasks: 235 total, 1 running, 181 sleeping, 0 stopped, 1 zombie %Cpu(s): 56.4 us, 2.6 sy, 0.0 ni, 40.5 id, 0.1 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem : 7868576 total, 1022508 free, 2635576 used, 4210492 buff/cache KiB Swap: 0 total, 0 free, 0 used. 4484128 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15736 root 20 0 31840 1564 1412 S 199.0 0.0 0:46.34 samples_test
这里的%CPU为什么会超过100%? 就算cpu不停的运行,最多也就是100% ,这个时候我们需要了解这个字段的具体含义:
$ man top
......
1. %CPU -- CPU Usage
The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time.
In a true SMP environment, if a process is multi-threaded and top is not operating in Threads mode, amounts greater than 100% may be reported. You toggle Threads mode with the `H' inter‐
active command.
Also for multi-processor environments, if Irix mode is Off, top will operate in Solaris mode where a task's cpu usage will be divided by the total number of CPUs. You toggle Irix/Solaris
modes with the `I' interactive command.
......这里先介绍几个概念:
SMP(Symmetric Multi-Processing) ,即对称多处理器结构,特征是只有一个操作系统实例,运行在多个CPU上,每个CPU的结构都是一样的,内存、资源共享。
进程 是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。
线程 单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。
进程与线程的关系 一个线程只能属于一个进程,但是一个进程可以拥有多个线程。多线程处理就是允许一个进程中在同一时刻执行多个任务。
给出解释:
top命令默认显示进程的数据(进程模式), 如果使用top -H,该选项会列出所有Linux线程 。如果top已经运行了,也可以通过按“H”键切换线程模式,每一个线程的%cpu最高也就100%。
%CPU表示的是上次更新到现在的CPU时间占用百分比 ,在实际的SMP环境中,如果进程有多个线程,用top命令默认模式查询,那么可能导致结果大于100%。
理论上cpu总共有N个核, top默认进程模式就可以显示到上限 N*100% 。( 总核数N是芯片数量 )
总核数N = CPU物理个数 x 每个CPU的核数 (top 按"1"切换看到的是逻辑cpu个数,不是总核数,注意区别。总逻辑CPU数 = 物理CPU个数 x 每颗物理CPU的核数 x 超线程数)
top -H,或者top运行后按下H开启线程模式。可以看到sample_test至少包含了两个cpu使用率都很高的线程,使用率接近100%,但是不会超过100%。
top - 10:13:40 up 3 days, 13:10, 1 user, load average: 1.88, 1.10, 1.49 Threads: 1018 total, 4 running, 961 sleeping, 0 stopped, 1 zombie %Cpu(s): 56.8 us, 1.6 sy, 0.0 ni, 41.3 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 7868576 total, 1009804 free, 2643240 used, 4215532 buff/cache KiB Swap: 0 total, 0 free, 0 used. 4472252 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15737 root 20 0 31840 1564 1412 R 99.3 0.0 1:07.91 samples_test 15738 root 20 0 31840 1564 1412 R 98.0 0.0 1:07.83 samples_test
top -H -p pid(top进程模式查到的pid),可以看到实际samples_test一共是有三个线程的,其中两个cpu使用率特别高,一个特别低。
$ top -H -p 15736 top - 10:40:41 up 3 days, 13:37, 1 user, load average: 2.65, 2.75, 2.44 Threads: 3 total, 2 running, 1 sleeping, 0 stopped, 0 zombie %Cpu(s): 56.2 us, 2.2 sy, 0.0 ni, 41.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 7868576 total, 332464 free, 3167324 used, 4368788 buff/cache KiB Swap: 0 total, 0 free, 0 used. 3846852 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15737 root 20 0 31840 1680 1528 R 99.3 0.0 17:27.23 samples_test 15738 root 20 0 31840 1680 1528 R 99.0 0.0 17:26.73 samples_test 15736 root 20 0 31840 1680 1528 S 0.0 0.0 0:00.00 samples_test
可以使用pstree命令快速查看进程中线程的关系:
$ pstree -p 15736
samples_test(15736)─┬─{samples_test}(15737)
└─{samples_test}(15738)可以看到,线程号15736的线程为主线程(进程模式首先看到的),cpu使用率低;而15737和15738两个线程为子线程(线程模式可以看到),cpu使用率很高。
03. 几个cpu使用率高的案例参考
【mysql 占用CPU超过100%解决过程】
【mysql 占用cpu特别高的解决】
版权声明:本文标题:当Linux CPU负载高过100%,如何轻松搞懂并化解 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1770847031a3538245.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论