iostat ----监控 磁盘io的情况
- iostat 显示设备,分区和网络文件系统的CPU统计信息和输入/ 输出统计信息
- 重点的参数
- -c 显示CPU使用率报告
- -d 显示设备使用率报告
- -k 以每秒千字节显示统计报告
- -m 以每秒兆字节显示统计报告
- -x 显示扩展统计信息
- Device:
- rrqm/s 读取磁盘队列数量/s
- wrqm/s 写磁盘队列数量/s
- r/s w/s 每秒的读\写的请求次数
- rMB/s wMB/s 每秒读\写磁盘的大小
- avgrq-sz 平均请求磁盘扇区数
- avgqu-sz 等待队列的大小
- **await r_await w_await ** 等待
- svctm 请求用的时间
在项目的服务器中, 应用服务器,一般追求 计算能力, 我期望的是 cpu、内存性能要好。
但是,数据库服务器,追求的是稳定,是磁盘读写数据的速度 ----数据库要求 磁盘的性能要好。
补充知识:
- linux的磁盘,有两种 sd , hd
- sd盘===机械硬盘, 虚拟出来的磁盘,一般都是 sd盘;
- hd 固态硬盘
- 后面有字母, 字母代表第几个硬盘 sda 第1个机械硬盘 sdc 第三个机械硬盘
- 再后面的数字,代表 第几个分区
- sda1 第1个机械硬盘的第1个分区
- sda2 第1个硬盘的第 2个分区
dstat:是一个用例替换vmstat、iostat等命令的工具,功能比较全,有彩色的界面
安装: yum install dstat -y
cpu的性能分析
CPU: 中央处理器(Central Processing Unit)
核心数量: cpu一般都是多核
架构: x86 powerpc arm
频率:GHz ----个人电脑 一般是 低于3GHz 这个数值越大,说明时钟就越短
- cpu的结构: 运算器、控制器、寄存器、时钟
- 运算器\运算单元: 计算
- 控制器\控制单元: 把内存的指令、数据读入寄存器,控制计算机
- 寄存器\存储单元:暂存指令、数据、地址
- 内存:与CPU沟通的桥梁;存cpu的运算数据;硬盘、外存数据 cpu的内核、线程、架构
- 查看cpu命令top 1
- lscpu
- cat /proc/cpuinfo
- load average 和 CPU使用率之间的关系
- 现在的linux服务器中,load average ≠CPU使用率
- load average 是希特的整体负载体现
- 他包括 CPU负载 == DIsk负载(磁盘负载) + 网络负载 +外设负载
- load average = cpuload + ioload
- CPU的上下文: CPU寄存器和程序计数器
- 在cpu中 有相关联的任务, 由一个任务切换到另外一个任务上,切换是 切换了任务在cpu中 程序计数器和 寄存器
- CPU上下文切换:三种
- 进程上下文切换 :同一个进程:进程用户态 ---系统调用--> 进程内核态 ---系统调用---> 进程用户态
- 由一个进程 切换到另外一个进程, 进程切换了,那么线程自然也就切换了
- 进程是资源的拥有者, 先要保存原来的进程的资源, 然后,再打开另外一个进程的资源 ----这个会有一定时间的卡顿 (这个卡顿一般 是 纳秒)
- 线程上下文切换
- 线程 是 进程中 干活
- 线程 可以是 ** 同一个进程间**的线程切换, 进程是 资源的拥有者,所以,这个时候,我们只需要保存线程的私有资源,然后, 打开另外线程的私有资源,不用去保存 进程的资源。
- 也可以是 不同进程间的线程切换
- 中断上下文切换: 硬件发出中断事件(cpu、缺少资源,异常...)
load高&CPU高
- top
- 情况1:sys系统态高=====排查CPU上下文切换
- 如果'非自愿上下文切换'多,说明cpu不够用,进程时间片到,被迫切换
- 如果自愿上下文切换'多,说明计算用的资源不够用,可能存在I/O、内存瓶颈
- 情况2:si软中断高==CPU抢资源,资源不够用I/0问题
- sys高+si高-------->推导出-------->内存or网络I/O问题--解决办法:排查内存和I/0
- sys高+si不高-------->推导出-------->CPU瓶颈--解决办法之一:加CPU
- 情况3:us用户态高===用户程序计算
- 密集型计算、内存FGC、资源等待(线程池)--解决办法:逐个排查