day16_操作系统整体复习01

分析性能问题思路

1、画出架构图

day16_操作系统整体复习01

2、根据系统架构图—画出被测数据的业务流向图、问题一定在数据流向图节点里面

day16_操作系统整体复习01

 如果响应时间很长问题可能出现在哪里?

网络:带宽有没有打满 、有没有丢包情况用命令查看  netstat  -i 

cpu:首先看哪个进程占用cpu最高、java看进程下哪个线程消耗最高的cpu、看线程执行什么操作。

cpu—sy:系统内核、cpu把它的时间片过多的消耗到系统内核调用上,系统内核调用常见的磁盘的io,所以要看磁盘的io是否高 。读写速度、看磁盘队列有没有排队。

cpu—us:首先看哪个进程占用cpu最高、java看进程下哪个线程消耗最高的cpu、看线程执行什么操作。

内存:看used和free  看java进程还是非java进程。

磁盘:Iostat  -d

st1:客户端或者负载机发送请求(负载机等待也要算响应时间)负载机。

t2:网络传输时间(网络)网络性能瓶颈。

t3:连接服务器的时间、寻找空闲连接池(web容器连接池)

t4:读取代码的时间—与硬件有关cpu进行调度、cpu调度应用程序执行、逻辑处理、判断。Cpu运行要取决于内存、内存开辟一块物理地址空间、cpu调度内存里的数据(代码逻辑)

t5:建立数据通道(数据库连接池)

t6:传送网络时间(网络)

t7:数据库sql执行时间(sql时间)

t8:网络通道返回(网络)

t9:连接池唤醒、连接恢复(web容器连接池)

t4:读取代码(代码逻辑)

t10:返回结果(网络)

怀疑性能瓶颈在数据库端?

1、首先看硬件

cpu—

负载—avg(过去1分钟、5分钟、15分钟)cpu正在调用的进程+正在等待的io进程之和。(负载高:正在调用的进程数过多或正在等待io的进程数过多)

io—数据库上问题一切揭io  读操作上因为读大于写, 磁盘读写—读:查询操作数据不再内存里,从磁盘读到内存,写:先写内存,读和写都在内存里操作cpu在内存里干活,同步到磁盘。

网络—

web容器  tomcat   

1、工作模式

这三种模式的不同之处如下:
  • BIO:
一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。 Tomcat7或以下,在Linux系统中默认使用这种方式。
  • NIO:
利用Java的异步IO处理,可以通过少量的线程处理大量的请求。 Tomcat8在Linux系统中默认使用这种方式。 Tomcat7必须修改Connector配置来启动: <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"           connectionTimeout="20000" redirectPort="8443"/> 
  • APR:
即Apache Portable Runtime,从操作系统层面解决io阻塞问题。 Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。 Linux如果安装了apr和native,Tomcat直接启动就支持apr。(安装方法:http://www.cnblogs.com/nb-blog/p/5278502.html)   官方对这三种的区别的详细说明:                   Java Blocking Connector   Java Nio Blocking Connector   APR/native Connector 
                             BIO                         NIO                       APR 
Classname                AjpProtocol               AjpNioProtocol           AjpAprProtocol 
Tomcat Version           3.x onwards                 7.x onwards              5.5.x onwards 
Support Polling              NO                          YES                       YES 
Polling Size                 N/A                   maxConnections             maxConnections 
Read Request Headers      Blocking                  Sim Blocking                   Blocking 
Read Request Body         Blocking                  Sim Blocking                   Blocking 
Write Response            Blocking                  Sim Blocking                   Blocking 
Wait for next Request     Blocking                  Non Blocking               Non Blocking 
Max Connections        maxConnections              maxConnections             maxConnections   Tomcat启动的时候,可以通过log看到Connector使用的是哪一种运行模式:
  • Starting ProtocolHandler ["http-bio-8080"]
  • Starting ProtocolHandler ["http-nio-8080"]
  • Starting ProtocolHandler ["http-apr-8080"]

2、连接池—线程池是否会有排队、阻塞的情况,看看连接池是否用满。

3、长连接—keeplive、超时时间设置(sendtimeout、keeplivetimeout、connecttimeout)

4、静态资源的压缩

5、动静分离(前端有前端的东西、后端有后端的东西)

6、请求发数据库—数据库有数据库连接池—数据库连接池在代码里配置(应用程序到数据库的大小、数据库还会配置对外提供的连接池大小)在my.cnf 配置。

jmeter连接jdbc   ip、端口号、database、 要配置连接池大小、用户名、密码,其他应用程序也会配置这些值。

7、数据库连接池一般不会配置很大、漏斗原来,发很多请求到数据可能就不会那么多了。

8、怎么查看有几个连接ip连接数据库   数据库连接工具  tools—show—Processlist

9、如何评估多少台应用服务器—看线上流量使用多少流量、线上承受多少并发量和tps,测单机。

线上要承受10000万个并发,单机tps = 10  那就要10000/10 =1000台机器。

10、数据库 : 一主多从   、拆库分表。

11、看看数据库连接池是否占满。

12、是否看有没有慢查询—看慢查询日志,有没有慢sql,分析一下sql的执行计划explain,看看是否有优化空间。建议看“mysql高性能 第三版”。

 

上一篇:【开源】千里尘,一个阅读类微信小程序


下一篇:day16-python之函数式编程匿名函数