1,负载
什么是负载?
正在被CPU调度的进程+等待CPU调度的进程;正在运行的进程+正在io 的进程
怎么看负载?
load average:0.13 0.06 0.01 过去一分钟的系统的平均负载,过去5分钟的平均负载,过去15分钟系统的平均负载
什么样的负载是OK的?
不超过CPU颗粒数
进程是资源分配的最小单元
线程最小的调度单元
2,CPU
CPU理解?
CPU工人干活的在内存干活,内存相当于车间,数据最终存在磁盘,相当于仓库
怎么样的CPU是OK的?
CPU使用率(user+sy)不超过80%
97.4%id>20%,大于20%就是OK的
问题:Tomcat进程在写日志时消耗的是系统内核进程,消耗的是系统CPU
回答:系统的CPU,系统内核切换的时候消耗的CPU,进程切换的时候,需要保持进程的上下文状态,进程切换是在内核进行切换的,用到内核的进程,写磁盘,读磁盘是消耗系统的进程,从用户进程切换到系统内核进程,系统内核对进程操作
3,内存 闪存,重启就没了,men是内存
Java应用程序没有内存使用率之说,只有gc频率以及内存溢出;关心fullgc和内存溢出;因为Java有虚拟机,有最小内存和最大内存,
非Java应用小于80%
4,磁盘 存储所有数据 iostat -x
磁盘主要看什么?
繁忙程度和队列
磁盘有哪些指标?
tps:每秒读,写磁盘的次数;每秒io的次数
rd_sec/s :每秒读磁盘的次数 ,读的比较多说明内存数据不够,从磁盘读数据
rd_sec/s:每秒写磁盘的次数,写的比较多在写日志
avgrq-sz:每秒操作扇区的大小
avgqu-sz;磁盘队列长度,队列大小长度,就是请求有没有排队,不能有大于1;
await:磁盘每次处理的时间,不超过5毫秒,看读多还是写多,如果读多,内存的数据不够
读多:数据库的全表扫描,执行语句,在内存中执行,从磁盘中读出来,
写过:就是写操作比较多,
svctime:磁盘自己处理的时间,
排队时间:await-svctime
怎么看磁盘是否OK?
单块磁盘的繁忙程度不超过30%,用nmon命令,看busy 是否超过30%
或者看队列不能超过1
怎么查看打开文件大小?
open files:1024个
ulimit -n 65535 调整为65535
问题?一个请求的响应时间慢,原因是什么?
首先看响应时间都包括什么?
响应时间就是用户从发送请求到展示到页面的时间,也就是前端时间和服务器的处理时间,一般我们都说的是服务器的时间
也就是服务器时间,数据库时间,网络时间
划分为web服务器时间,应用其服务器时间,数据库时间,以及各服务器间通信的网络时间。
三个方面:
服务器处理:代码处理逻辑,中间件,操作系统(因为db和web容器运行在操作系统上)硬件资源CPU,io等
网络
数据库:执行sql时间sql执行的效率,数据库执行的快还是慢,看服务器的慢查询日志,或者把sql拿出来执行一下
负载机---》网络----》web容器(Tomcat,apache等)是否空闲进程,然后执行代码,执行到sql语句时,线程挂起,因为等待数据库返回结果,-----》数据库执行sql执行时间(数据库是否有空闲的数据库连接池,如果没有进行排队)
1,请求发起的地方负载机,负载机的配置(负载机的带宽啥的) client
2,带宽 网络
3,web容器线程池是否排队,web容器是Tomcat,Apache,资源池是否排队,看是否有空闲的线程,如果排队到了的话就开始执行代码---执行到sql语句的话请求(线程或者进程)挂起---------请求请求发到数据库,数据库执行sql---执行完后把结果返回
4,数据库连接池是否排队,如果有空闲的数据库连接池
5,sql执行的效率,数据库执行的快还是慢,看服务器的慢查询日志,或者把sql拿出来执行一下
6,jvm是否暂停 应用程序线程暂停的
7,代码的业务逻辑的问题
Nginx多进程,
8,web容器和db都是在操作系统上,硬
缓存和缓冲的区别:
缓存说的是数据,数据从硬盘到内存
缓冲说的是文件,