性能有关相关问题 --个人课程不公开

首先第一题 并发指标分析的指标下列有哪些?
A:吞吐量
B:QPS
C:TPS
D:RT
正确答案是ABCD

根据大家的答题情况,可以看到有近30%的同学 没有选择RT哈~,其实RT,也就是Response Time,响应时间哈,下面我把每一个选项给大家挨个进行解析

吞吐量: 首先我们应该明确一个系统的吞吐量到底代表什么含义,一般来说,系统吞吐量指的是系统的抗压、负载能力,代表一个系统每秒钟能承受的最大用户访问量。 一个系统的吞吐量通常由qps(tps)、并发数来决定,每个系统对这两个值都有一个相对极限值,只要某一项达到最大值,系统的吞吐量就上不去了。 所谓的系统吞吐量其实就是 : 系统每秒请求数

 

QPS: Queries Per Second,每秒查询数,即是每秒能够响应的查询次数,注意这里的查询是指用户发出请求到服务器做出响应成功的次数,简单理解可以认为查询=请求request。 qps=每秒钟request数量

 

TPS: Transactions Per Second 的缩写,每秒处理的事务数。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。

 

RT: Response Time缩写,简单理解为系统从输入到输出的时间间隔,宽泛的来说,他代表从客户端发起请求到服务端接受到请求并响应所有数据的时间差。一般取平均响应时间。

 

第二题 实现高并发需要考虑下列哪些因素?
A:系统的架构设计
B:网络拓扑优化减少网络请求时间
C:提高代码层面的运行效率
D:数据库优化减少查询修改时间
正确答案是ABCD

 

系统的架构设计,如何在架构层面减少不必要的处理(网络请求,数据库操作等)例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间
网络拓扑优化减少网络请求时间、设计拓扑结构,分布式的实现方式
提高代码层面的运行效率、如何选取合适的数据结构进行数据存取,设计合适的算法
据库优化减少查询修改时间。数据库的选取,数据库引擎的选取,数据库表结构的设计,数据库索引,触发器等设计,是否使用读写分离,还是需要考虑使用数据仓库

 

下面是昨晚作业的第三题:我们可以通过哪些参数优化springboot内置tomcat?
A:accept-count:最大等待数
B:maxThreads:最大线程数
C:maxConnections:最大连接数
D:以上都不对
正确答案是ABC哈~

 

accept-count:最大等待数 官方文档的说明为:当所有的请求处理线程都在使用时,所能接收的连接请求的队列的最大长度。当队列已满时,任何的连接请求都将被拒绝。accept-count的默认值为100。 详细的来说:当调用HTTP请求数达到tomcat的最大线程数时,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100。如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)

 

maxThreads:最大线程数 每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务容器可以同时处理多少个请求。maxThreads默认200,肯定建议增加。但是,增加线程是有成本的,更多的线程,不仅仅会带来更多的线程上下文切换成本,而且意味着带来更多的内存消耗。JVM中默认情况下在创建新线程时会分配大小为1M的线程栈,所以,更多的线程异味着需要更多的内存。线程数的经验值为:1核2g内存为200,线程数经验值200;4核8g内存,线程数经验值800

 

maxConnections:最大连接数 官方文档的说明为:这个参数是指在同一时间,tomcat能够接受的最大连接数。对于Java的阻塞式BIO,默认值是maxthreads的值;如果在BIO模式使用定制的Executor执行器,默认值将是执行器中maxthreads的值。对于Java 新的NIO模式,maxConnections 默认值是10000。 对于windows上APR/native IO模式,maxConnections默认值为8192,这是出于性能原因,如果配置的值不是1024的倍数,maxConnections 的实际值将减少到1024的最大倍数。 如果设置为-1,则禁用maxconnections功能,表示不限制tomcat容器的连接数。 maxConnections和accept-count的关系为:当连接数达到最大值maxConnections后,系统会继续接收连接,但不会超过acceptCount的值

 

下面是第四题,java服务常见线上问题有哪些?
A:CPU 使用率峰值突然飚高
B:内存溢出 (泄露)
C:磁盘满了
D:网络流量异常
正确答案是ABCD哈~

 

所有 Java 服务的线上问题从系统表象来看归结起来总共有四方面:CPU、内存、磁盘、网络。例如 CPU 使用率峰值突然飚高、内存溢出 (泄露)、磁盘满了、网络流量异常、FullGC 等等问题。基于这些现象我们可以将线上问题分成两大类: 系统异常、业务服务异常

 

第五题是 QPS和TPS区别有哪些?

其实呢QPS和TPS区别如下: 1、Tps即每秒处理事务数,包括了用户请求服务器 服务器自己的内部处理 服务器返回给用户这三个过程,每秒能够完成N个这三个过程,Tps也就是N;

 

2、Qps基本类似于Tps,但是不同的是,对于一个页面的一次访问,形成一个Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中。例子: 例如:访问一个页面会请求服务器3次,一次放,产生一个“T”,产生3个“Q” 例如:一个大胃王一秒能吃10个包子,一个女孩子0.1秒能吃1个包子,那么他们是不是一样的呢?答案是否定的,因为这个女孩子不可能在一秒钟吃下10个包子,她可能要吃很久。这个时候这个大胃王就相当于TPS,而这个女孩子则是QPS。虽然很相似,但其实是不同的。

 

大部分情况不用纠结QPS TPS TPS=QPS(每秒请求数),所以大部分条件下,这两个概念不用纠结的! 举个例子,我需要进行一次查询,但这个查询需要调用A服务和B服务,而调用B服务需要2次调用,那么这种情况,以我查询这个场景成功作为一次事务的话,我一秒请求一笔就是1tps,当然对于A系统是1tps=1qps的.但对于B系统而言,就是2qps,因为调用了两次(如果只看B服务的话,把每次请求当做一次事务的话2qps=2tps,还是可以等同的)所以仅仅是关注维度的不同,绝大多数时候我们不用去刻意区分的,毕竟我可以说我流程是1tps,B系统受到的双倍额压力是2tps的量(压测过程中也务必关注这样的流量放大服务,因为很有可能前面的服务抗的住,后面扛不住),这样也是完全没有问题的

上一篇:MySQL数据库优化、架构


下一篇:TPS QPS