Linux 性能分析笔记

| 分类 读书笔记  标签 Linux  总结  运维 

1. 平衡负载

  • 均载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程 数(不可中断状态实际上是系统对进程和硬件设备的一种保护机制。),也就是平均活跃进程数和CPU使用率没关系。如果数量为 2 ,在只有 2 个 CPU 的系统上,意味着所有的 CPU 都刚好被完全占用。在 4 个CPU 的系统上,意味着 CPU 有 50% 的空闲。而在只有 1 个 CPU 的系统中,则意味着有一半的进程竞争不到 CPU。
  • 平均负载和CPU使用率不同,I/O密集型也会导致平均负载升高,但是CPU使用率不一定很高

命令备忘


# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
$ cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
-> 1

# 查看每个物理CPU中core的个数(即核数)
$ cat /proc/cpuinfo| grep "cpu cores"| uniq
-> 4

# 查看逻辑CPU的个数
$ cat /proc/cpuinfo| grep "processor"| wc -l  
$ grep 'model name' /proc/cpuinfo | wc -l
-> 8

查看CPU信息(型号)
$ cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
-> 8  Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz

# 2020年02月01日 Ubuntu 查看状态
$uptime
15:41:01 up 2 days, 21:03,  1 user,  load average: 0.22, 0.33, 0.68

# 定位问题
# 安装stress 和 sysstat,先看状态,定位进程
$ watch -d uptime
$ mpstat -P ALL 5
$ pidstat -u 5 1

2. CPU 上下文

人和cpu一样看起来可以处理多任务,其实也是把不同的时间分配给不同的任务,并且上下文切换的时候也要浪费时间。不同的是机器可以一直做一个任务不累,但是人最好换一下,否则效率也会下降,所以也要人为的切换一下任务

  • 根据任务的不同,CPU 的上下文切换就可以分为几个不同的场景,也就是进程上下 文切换、线程上下文切换以及中断上下文切换。

命令备忘

# cs(context switch)是每秒上下文切换的次数。
# in(interrupt)则是每秒中断的次数。
# r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。
# b(Blocked)则是处于不可中断睡眠状态的进程数。
$ vmstat 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0   1024 1212708 246464 2799540    0    0    25    28  404   51  6  2 92  0  0

# cswch: ,表示每秒自愿上下文切换 (voluntary context switches)的次数,所谓自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。
# nvcswch: ,表示每秒非自愿上下文 切换(non voluntary context switches)的次数。而非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。

$ pidstat -w
Linux 4.15.0-76-generic (Ubuntu)    2020年02月02日     _x86_64_    (8 CPU)

17时59分52秒   UID       PID   cswch/s nvcswch/s  Command
17时59分52秒     0         1      8.02      0.01  systemd
17时59分52秒     0         2      0.01      0.00  kthreadd


3. 基础篇

  • CPU 使用率 = 1 - 空闲时间/总CPU时间

上一篇     下一篇