一、CPU核数
1、物理cpu个数:看physical id
# 以下表示有2个物理CPU
[root@8-20 ~]# cat /proc/cpuinfo |grep -i 'physical id'|sort|uniq
physical id : 0
physical id : 1
2、核数:看cpu cores
#以下表示每个物理CPU,是8个核
[root@8-20 ~]# cat /proc/cpuinfo |grep -i 'cpu cores'|sort|uniq
cpu cores : 8
3、是否支持超线程:sibling 是否大于cpu cores,如果大于,则表示支持超线程,超线程数为siblings/cpu cores=16/8=2
4、总核数:物理CPU个数*核数,以上例子:2*8=16核
5、总逻辑CPU数(线程数):总核数*超线程数,以上例子:16*2=32线程
6、有个更简单的方式看总逻辑CPU数的:top命令,然后按1
二、linux的进程状态
2.1 R状态(会对系统产生负载)
就绪状态(runnable):表示进程处在CPU的就绪队列中,就绪态的进程
运行状态(running):表示进程处在CPU的就绪队列中,运行态的进程
2.2 D状态(会对系统产生负载)
不可中断睡眠状态(uninterruptible):表示进程正在和硬件交互中(例如申请资源(内存、io)或者和硬件打交道),这个时候,是不允许被其它进程打断的,这也是一种进程的自我保护机制。虽然短时间内是不可中断的睡眠状态,其实它还在占用资源,所以它会产生系统负载。
注:少量D状态没关系,但是有大量的D状态:需要进一步分析瓶颈在哪里
2.3 Z状态
僵死状态(zombie):僵尸进程,表示进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符,PID等)
2.4 S状态
可中断状态睡眠,表示进程因等待某个事件而被系统挂起(阻塞态)。当进程等待的事件发生时,就会被唤醒并进入R状态
2.5 I状态
空闲状态(Idle)。用在不可中断睡眠的内核线程上。硬件交互导致的不可中断进程用D表示,但对某些内核线程来说,处在不可中断睡眠时有可能实际上并没有任何负载。
2.6 T或t状态
(Stopped 或 Traced)表示进程处于暂停或者跟踪状态
2.7 X状态
进程已经消亡
三、平均负载load average
1、含义:系统的平均负载长度,即平均的活跃进程数(R状态【runing、runable】和D状态【不可中断,它在和硬件交互,受保护】)
说明:R状态和D状态都是可以产生系统负载的
2、平均负载怎么样才算高?如何计算?
需要看核数、看系数
2.1 高低与否,跟cpu核数有关系
2.1 单核 过去1分钟、5分钟、15分钟的平均负载>10 高
2.2 24核 过去1分钟、5分钟、15分钟的平均负载>10 且小于24,不高
2.2、如何计算系数
<0.7*核数 ,load不高
大于0.7核数,小于5*核数,load高不高,不好说,要进一步监控分析
>5*核数,load高
3、平均负载高有哪些原因造成?
平均负载是会将r状态、b状态的进程计入负载,因此造成的平均负载高的原因,肯定可以推断出活跃进程数量多。
3.1 只能推导出进程数太多、应用是cpu密集型进程,这些cpu密集型进程的(计算、统计)任务太多,cpu满负荷,此时需要进一步要看top,看哪个进程导致的。
3.2 有可能I/O繁忙(读或者写,请求、读、写数据),这时候要多关注D状态的进程(vmstat b列的阻塞进程,进一步监控IO使用率)
4、与平均使用率对比
4.1 平均负载高,就一定cpu占用高吗?
CPU密集型进程,是的,平均负载高,就一定cpu占用高
I/O密集型不一定平均负载高,就cpu占用高(没有复杂的计算运算,所以不一定)
4.2 cpu占用高,就一定平均负载高吗?
cpu占用高,不一定平均负载高:一个java进程,占了90%,8核,平均负载可能就是1
cpu密集型进程,占比高,且进程多,所以,cpu占用高,可能平均负载高
本文由梁桂钊于2023-06-20发表在梁桂钊的博客,如有疑问,请联系我们。
本文链接:https://720ui.com/3482.html