根据架构图—画出请求数据流 —根据数据流经过的节点分析问题
负载机—经过网络传输到—应用服务器—跑服务—空闲中间件连接池(web请求连接池)_处理代码—通过网络把sql发送到—数据库连接池—请求发送到数据库服务器—数据库执行sql语句—将数据结果通过网络返回应用服务器—应用服务器对进程和线程唤醒—返回数据结果继续执行代码—将返回结果return—通过网络返回客户端
分析原因:
负载机(硬件)—网络—应用服务器(硬件)—数据库服务器(硬件)—web容器连接池—数据库连接池—sql执行过程—代码的业务逻辑。(java会有jc一说)
分析操作系统
操作系统三大件
1、cpu:Cpu对操作系统影响最大-逻辑判断处理计算
2、内存:cpu工作需要的数据存在这里,相当于闪存和缓存,电脑重启后数据就释放了,例如qq进程强制被杀死,释放一块地址空间、如果在重新开启就开辟一块内存地址空间。非关 系型数据库nosql存在内存里Redis存放的key-value键值存储,内存比磁盘块很多。
如果发生内存满了、所以电脑卡了、重启就全部清空内存了。
3、磁盘:存储最终需要的数据永久存储、关系型数据库mysql、oracle数据存在磁盘里例如存一些报表,回收站清空时-清理的是磁盘、360提示清理垃圾、垃圾数据在磁盘上。
Cpu对操作系统影响最大-Cpu计算、逻辑判断的数据都存在内存里例如cpu进行if(a>0)逻辑判断但是数据a来自于内存。4、固态硬盘:分散的读写速度更快 ,存储数据。
5、机械硬盘:读写是一个通道一个通道比较慢,存储数据。
6、二级缓存:lev1和lev2在cpu和内存之间、比内存速度更快。但是二级缓存很贵,现在已经没人用
7、磁盘的io:磁盘的读和写操作
8、一切问题揭io:数据库一般读写存在这个问题(数据库数据不再内存里在磁盘里)
读: Sql的执行过程—读操作从磁盘里读—读取后放内存(缓存数据)—在读内存
发生的原因
1) 不是热点数据:热点数据就是缓存在内存里的数据-常规数据,数据里缓存。
2) Sql语句写的有问题例如select * 查询量很大。—全部从磁盘把数据搬家过来,读出来在进行判断过程会很长。
写:数据库语句insert写入到内存,这条sql就完成了,内存会自动同步到磁盘,再从内存放到磁盘上去。磁盘读速度不够快时,如果内存读取过程中电脑重启造成数据丢失。(取数据量很大、就读磁盘)
cpu利用率和cpu使用率是多少—硬盘利用率—磁盘io读写的大小
9、cpu利用率:时间片里面供应用程序工作的时间片+系统调度的时间片之和/总时间
例如:开启qq、录制屏幕、聊天yy电脑不卡
原因:
l Cpu时间切片:1s中切成65535份是串行操作,第一份供给a进程、第二份给b进程, 每份切换给不同的进程,cpu在同一瞬间只能处理同一个任务。时间片处理我们基本上看不到。
l Cpu把进程上下文切换:当前做什么事、回来再做什么事情。把当前进程状态保存起来、等待cpu切换回来继续执行。
10、cpu使用率:时间片切换出去之后,(时间片里面供应用程序工作的时间片(cpu读自己内存里的东西)+系统调度的时间片之和)/总时间。
11、cpu使用率越高-应用程序处理越慢的原因为:
供用户进程和系统进程工作时间比较多。
l 如果占比100%或者占比到90%等待cpu大部分时间都在给用户进程和系统进程工作。
l 存在概率为:都在为系统进程和用户进程工作、切时间片的时间越来越少,进程排队等待时切片越来越长、等待cpu调度代码时间越来越长,程序越来越慢。
面试题:cpu、内存、磁盘什么关系
Cpu:逻辑判断、计算处理。
内存:cpu工作的那些数据要从这里读取、数据存放。
磁盘:最终存放数据的地方。
例如:
cpu相当于工人—材料由工人加工。
内存相当于车间—工人在车间加工原材料、材料在内存放着,加工后临时放车间在放到仓库。
磁盘相当于仓库—加工后的放到仓库。
如果想提升加工效率——加人、加熟练工种就是cpu的赫兹、加车间
介绍top命令
面试题:启动一个java进程
1、User是root 他占用的是消耗用户cpu还是消耗系统cpu
l 消耗用户cpu
2、java进程会写日志再往磁盘写数据,写日志的人是用户cpu还是系统cpu
l 消耗系统cpu-写磁盘时用户进程调用系统内核,切换到系统内核,系统内核调用底层命令在写日志
Us:用户消耗的cpu使用率 sy:系统消耗cpu使用率
负载
负载load average:三个参数代表:过去1分钟、5分钟、15分钟
负载如何计算:cpu正在调用的进程Run进程以及cpu等待io进程之和
命令vmstat 下图r就是代表在cpu运行的进程cpu正在调度的进程、b等待io的进程
负载值多少合理取决于cpu颗粒数、建议颗粒数的70%-80%
面试题
1、负载高cpu就一定高吗?负载低cpu就一定低吗?
例如:一个进程有大量复杂的计算会造成cpu很高、但负载就一个。
时间片都给了一个进程、一个进程cpu使用率很高,但是进程队里只显示一个Runing的所以负载不高。
反过来—有很多个进程运行只占用了cpu的20%多的时间片,但是系统还有大量进程等待、等待其他的外部io的返回、负载:Runing+io等待所以负载变大。
有关系但是不是绝对关系
进程状态为(有点懵逼)
举例子:ABC都启动
操作系统性能好坏看—cpu使用率还要看负载
正在调度的进程叫Running—等待io也叫中断状态、等待一个外部设备的输入或等待io的一个返回结果、然后在继续进行处理。
中断可恢复:等待外部输入例如input操作不知道什么时候返回结果
中断不可恢复:不断不可干预、会给个返回结果例如io系统内核在工作不可控制
这是负载是几个:
负载怎么去理解
例如:三条车道马路—三台以内最合理—如果四个车去跑就得有人排队等待—跑的车辆越多等待的就越多。
负载多少合理:取决于cpu颗粒数—一般建议是cpu颗粒数的 70%到80%
正在进程Running拿到cpu时间片的状态和等待IO进程之和
我们是单核cpu
Cpu使用率多少合适
IO密集型应用:(生活中用的比较多,建议cpu(s):us+sy不超过80%)读数据库从磁盘里取数据、把数据存到磁盘。
Cpu计算型应用:大部分时间都是计算特别消耗cpu
如何查看几核CPU
我的电脑—属性—设备管理器—处理器