linux性能调优

什么是平均负载

单位时间内的系统处于可运行状态和不可中断状态的平均进程数量,称为平均的活跃进程数量,本质上和CPU的使用率没有直接的关系

  • 平均负载 = 正在使用的CPU进程 + 等待的CPU进程 + 等待的I/O进程

  • 可运行状态:正在使用CPU或者是正在等待CPU进程,linux下PS查看到的(Running/Runnable)进程状态

  • 不可中断状态:进程正在处于内核交互中,这些进程是不可以被打断的,常见的是硬件设备的I/O等待,linux下PS中(Uninterruptible sleep)Disk sleep状态进程

CPU使用率

CPU使用率是单位时间内CPU的繁忙状态

  • CPU密集型进程:使用大量CPU会导致平均负载升高,此时这两者是一致的。

  • I/O密集型进程:等待 I/O 也会导致平均负载升高,但CPU使用率不一定很高。

  • 大量等待CPU的进程:调度也会导致平均负载升高,此时的CPU使用率也会比较高

平均负载和cpu使用率差异

  • 平均负载高有可能是 CPU 密集型进程导致的

  • 平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了

  • 当发现负载高的时候,你可以使用 mpstat、pidstat 等工具,辅助分析负载的来源。

有监控的情况下,首先去看看监控大盘,看看有没有异常报警,如果初期还没有监控的情况我会按照下面步骤去看看系统层面有没有异常
1、我首先会去看看系统的平均负载,使用top或者htop命令查看,平均负载体现的是系统的一个整体情况,他应该是cpu、内存、磁盘性能的一个综合,一般是平均负载的值大于机器cpu的核数,这时候说明机器资源已经紧张了
2、平均负载高了以后,接下来就要看看具体是什么资源导致,我首先会在top中看cpu每个核的使用情况,如果占比很高,那瓶颈应该是cpu,接下来就要看看是什么进程导致的
3、如果cpu没有问题,那接下来我会去看内存,首先是用free去查看内存的是用情况,但不直接看他剩余了多少,还要结合看看cache和buffer,然后再看看具体是什么进程占用了过高的内存,我也是是用top去排序
4、内存没有问题的话就要去看磁盘了,磁盘我用iostat去查看,我遇到的磁盘问题比较少
5、还有就是带宽问题,一般会用iftop去查看流量情况,看看流量是否超过的机器给定的带宽
6、涉及到具体应用的话,就要根据具体应用的设定参数来查看,比如连接数是否查过设定值等
7、如果系统层各个指标查下来都没有发现异常,那么就要考虑外部系统了,比如数据库、r缓存、存储等

基本上就上面这些步骤,有些不完整,希望跟着老师学习一些更系统的排查思路!

CPU上下文

Cpu上下文 = Cpu寄存器 + 程序计数器
Cpu寄存器:是cpu在封装出厂前内置的一块小容量,但是极快速度的内存
程序计数器:用来存储CPU正在执行的指令的位置、或者是即将执行的下一条指令的位置

  • 上下文切换这个词语很笼统,确切的说应该是CPU的上下文切换就可以分为几种不同的场景:进程上下文切换、线程上下文切换、中断上下文切换

CPU上下文切换

>

线程与进程

  • 线程和进程最大的不同点:
    • 线程是调度的基本单位,而进程是资源拥有的基本单位 ->内核中实际调度对象为线程,进程只是提供了虚拟内存全局变量等资源
  • 当进程只有有一个线程时,近似把 -> 进程 = 线程

  • 当进程拥有多个线程时候,这些线程会共享相同的虚拟内存和全局变量等资源 -> 此资源在上下文切换的时候不需要修改

  • 线程也拥有自己的私有数据 -> 栈和寄存器(上下文切换的时候也是需要去保存的)

发表评论