一、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

linux 进程cpu资源统计(Linux学习笔记一CPU核数)(1)

4、总核数:物理CPU个数*核数,以上例子:2*8=16核

5、总逻辑CPU数(线程数):总核数*超线程数,以上例子:16*2=32线程

6、有个更简单的方式看总逻辑CPU数的:top命令,然后按1

linux 进程cpu资源统计(Linux学习笔记一CPU核数)(2)

逻辑cpu个数为32

二、linux的进程状态

linux 进程cpu资源统计(Linux学习笔记一CPU核数)(3)

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占用高,可能平均负载高

,