分析性能问题思路html
一、画出架构图前端
二、根据系统架构图—画出被测数据的业务流向图、问题必定在数据流向图节点里面java
若是响应时间很长问题可能出如今哪里?mysql
网络:带宽有没有打满 、有没有丢包状况用命令查看 netstat -i web
cpu:首先看哪一个进程占用cpu最高、java看进程下哪一个线程消耗最高的cpu、看线程执行什么操做。sql
cpu—sy:系统内核、cpu把它的时间片过多的消耗到系统内核调用上,系统内核调用常见的磁盘的io,因此要看磁盘的io是否高 。读写速度、看磁盘队列有没有排队。数据库
cpu—us:首先看哪一个进程占用cpu最高、java看进程下哪一个线程消耗最高的cpu、看线程执行什么操做。apache
内存:看used和free 看java进程仍是非java进程。后端
磁盘:Iostat -dtomcat
st1:客户端或者负载机发送请求(负载机等待也要算响应时间)负载机。
t2:网络传输时间(网络)网络性能瓶颈。
t3:链接服务器的时间、寻找空闲链接池(web容器链接池)
t4:读取代码的时间—与硬件有关cpu进行调度、cpu调度应用程序执行、逻辑处理、判断。Cpu运行要取决于内存、内存开辟一块物理地址空间、cpu调度内存里的数据(代码逻辑)
t5:创建数据通道(数据库链接池)
t6:传送网络时间(网络)
t7:数据库sql执行时间(sql时间)
t8:网络通道返回(网络)
t9:链接池唤醒、链接恢复(web容器链接池)
t4:读取代码(代码逻辑)
t10:返回结果(网络)
怀疑性能瓶颈在数据库端?
一、首先看硬件
cpu—
负载—avg(过去1分钟、5分钟、15分钟)cpu正在调用的进程+正在等待的io进程之和。(负载高:正在调用的进程数过多或正在等待io的进程数过多)
io—数据库上问题一切揭io 读操做上由于读大于写, 磁盘读写—读:查询操做数据再也不内存里,从磁盘读到内存,写:先写内存,读和写都在内存里操做cpu在内存里干活,同步到磁盘。
网络—
web容器 tomcat
一、工做模式
二、链接池—线程池是否会有排队、阻塞的状况,看看链接池是否用满。
三、长链接—keeplive、超时时间设置(sendtimeout、keeplivetimeout、connecttimeout)
四、静态资源的压缩
五、动静分离(前端有前端的东西、后端有后端的东西)
六、请求发数据库—数据库有数据库链接池—数据库链接池在代码里配置(应用程序到数据库的大小、数据库还会配置对外提供的链接池大小)在my.cnf 配置。
jmeter链接jdbc ip、端口号、database、 要配置链接池大小、用户名、密码,其余应用程序也会配置这些值。
七、数据库链接池通常不会配置很大、漏斗原来,发不少请求到数据可能就不会那么多了。
八、怎么查看有几个链接ip链接数据库 数据库链接工具 tools—show—Processlist
九、如何评估多少台应用服务器—看线上流量使用多少流量、线上承受多少并发量和tps,测单机。
线上要承受10000万个并发,单机tps = 10 那就要10000/10 =1000台机器。
十、数据库 : 一主多从 、拆库分表。
十一、看看数据库链接池是否占满。
十二、是否看有没有慢查询—看慢查询日志,有没有慢sql,分析一下sql的执行计划explain,看看是否有优化空间。建议看“mysql高性能 第三版”。