一、正确理解uptime每个字段的意思:
king@ubuntu:~$ uptime
16:11:04 up 22 min, 2 users, load average: 0.00, 0.02, 0.10
king@ubuntu:~$ uptime
16:18:16 up 29 min, 2 users, load average: 0.00, 0.00, 0.05
king@ubuntu:/proc$ uptime
17:32:05 up 1:43, 2 users, load average: 0.00, 0.00, 0.00
从左向右依次:
- 16:11:04:当前系统的时间;
- up 22 min:系统已经运行多久了;
- 2 users:当前系统有几个用户登录;
- load average: 0.00, 0.02, 0.10过去1分钟、5分钟、15分钟的系统平均负载情况。
可通过man uptime
查看文档
我们都是通过查看系统平均负载随时间的变化趋势来判断系统的运行情况。
二、正确理解平均负载:
官方的解释:单位时间内,系统中可运行(R)和不可中断(D)进程的平均进程数,也就是平均活跃进程数。
ps -aux
root 4797 0.0 0.0 0 0 ? R 16:24 0:00 [kworker/u256:2-]
- R:正在CPU上运行或者正在等待CPU的进程状态,如上;
- D:不可中断是指一些正在处于内核关键流程的进程,如果盲目打断,会造成不可预知的后果,比如正在写磁盘的进程,盲目被打断,可能会造成读写不一致的问题。
所以,平均负载通俗的理解成平均活跃的进程数,我们知道,计算的所有资源都是宝贵的,如何能把计算机的各种资源充分的利用起来,保证不“超载”,尽量不要“空闲”,保持最佳状态是我们每个程序开发者最希望看到的。
最理想的是,不论在单CPU还是多CPU,每时每刻每个CPU上都刚好运行着一个进程
假设此时的load average为2:
- 如果在2个CPU的系统上,表示CPU刚刚好都有进程使用,没有等待排队的进程;
- 如果在4个CPU系统上,表示说明CPU还空闲2个,自然也没有进程排队等待;
- 如果在一个单CPU的系统上,表示每次只能有一个进程执行,有一个进程在排队,属于过载情况。
通俗总结:
uptime看到的数值 / 系统CPU个数 == 1 :表示比较良好的运行状态;
uptime看到的数值 / 系统CPU个数 < 1 : 表示系统资源没有被充分的利用,也就是说系统压力不大;
uptime看到的数值 / 系统CPU个数 > 1 :表示系统的资源已经不够用了,进程在排队,处于过载状态。
即活跃进程数太高,CPU会不够用,就会出现过载情况
我们通过uptime可以查看到三个数值,我们在做分析的时候是需要将这三个数值联系起来的,因为是哪个数值是三个不同时间段的系统负载,通过观察三个时间点的走势,可以猜想该系统的多数情况是什么样的:
- 三个数值变化不大:系统情况稳定;
- 时间点前后差距大,说明某个时间段系统负载情况较大。这种情况可能只是偶尔出现,不过我们需要进行持续的观察,判断是偶尔会出现过载还是出现的比较频繁。
解决措施:
- 当出现某个时间点过载,可以将系统的uptime信息收集起来,然后在去比较历史信息,看负载趋势是怎么走的。
三、如何查看CPU信息:
cat /proc/cpuinfo 即可查看CPU信息,一下是我虚拟机中linux的cpu配置信息。
king@ubuntu:/proc$ cat cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
stepping : 9
microcode : 0x8e
cpu MHz : 2712.005
cache size : 3072 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xsaves arat
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
bogomips : 5424.01
clflush size : 64
cache_alignment : 64
address sizes : 43 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
stepping : 9
microcode : 0x8e
cpu MHz : 2712.005
cache size : 3072 KB
physical id : 2
siblings : 1
core id : 0
cpu cores : 1
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xsaves arat
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
bogomips : 5424.01
clflush size : 64
cache_alignment : 64
address sizes : 43 bits physical, 48 bits virtual
power management:
我的虚拟机中配置的CPU个数为2,至于以上的信息代表什么含义,我会在其他的文章中解释。
四、平均负载与CPU使用率的关系:
前面提到了,平均负载和正在运行进程、正在等待运行以及不可中断的进程构成,而CPU的使用率是在单位时间内,CPU执行任务的时间 / 单位时间
,他两之间有一定的联系:
- 对于CPU密集型,一定是进程的计算太多,此时负载一定会高一些;
- 对于IO密集型,等待IO的进程数量多,直接导致平均负载升高,该类进程属于平均负载中的等待进程,但是并没有占用CPU,所以CPU自然就不会上升了;
- 但是当CPU需要调度大量的等待进程,CPU工作量自然就上去了,平均负载也是提高的。