课堂课题:
为什么响应时间一般不允许超过200MS,怎么查看一个请求从发起到结束,耗费在什么地方了?
关联任务:
任务五
直播时间:
2019-06-24 15:00:00
课堂内容:
视频链接:
PPT链接:
提交按钮:
小课堂内容格式
标题:
【修真院xx(职业)小课堂】课题名称
开场语:
大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX
(1)背景介绍:
背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。
(2)知识剖析:
讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。
(3)常见问题:
最少列出1个常见问题。
(4)解决方案:
写清楚常见问题的解决方案。
(5)编码实战:
尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。
(6)拓展思考:
知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。
(7)参考文献:
引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。
(8)更多讨论:
Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答
(9)鸣谢:
感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。
(10)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
标题:
【修真院Java小课堂】
为什么响应时间一般不允许超过200MS,怎么查看一个请求从发起到结束,耗费在什么地方了?
开场语:
大家好,我是IT修真院上海分院第14期的学员胡畔,一枚正直纯洁善良的Java程序员,今天给大家分享一下,修真院官网Java任务3,深度思考中的知识点——为什么响应时间一般不允许超过200MS,怎么查看一个请求从发起到结束,耗费在什么地方了?
(1)背景介绍:
为什么要把响应时间控制在200MS?
平时打开一个网站,如果等待时间特别久,我们会不由自主的说一句:这网站真慢。但是对于一个程序员来说,就必须要把时间精确到多少MS。多少MS才算慢?通常来说,人的眼睛对200MS以上的延迟是有反应的,所以一般而言,一整个页面都应该在200MS之内完成。
对于复杂的请求,可以稍微慢一点,毕竟大家还能忍受,能忍的程度跟网站的价值成正比。
简单的用户个人信息这种请求,应该在50MS左右,List的数据,差不多在100MS左右。这是比较正常的数据。
(2)知识剖析:
对于一个网络请求来说,第一个层面,你需要知道的时间的损耗可以分解成三大部分。
第一部分前端的响应,一般包括解析和渲染,这部分的性能跟前端的代码,前端硬件有关系。
第二部分就是网络延迟,这部分的代码正常来讲是在8~16MS左右,是的,Http请求就是差不多这个性能,如果是WebSocket几乎可以做到零延迟。
第三部分就是服务器端的响应,我们说的是网站慢,一般而言,也就是主要在这里,要做性能优化的地方,基本上也是看这里。
那么怎么知道每一段时间间隔多久呢?
客户端到服务器端的响应时间,可以通过浏览器的F12或者Fiddler软件来查看
服务器端的响应时间就要通过nginx和Tomcat的日志来查看了
在访问网站的时候按F12后刷新,点击Network就可以看到各种资源的访问时间
不同的浏览器渲染引擎也不一样,渲染引擎首先通过网络获得所请求文档的内容,通常以8K分块的方式完成。下面是渲染引擎在取得内容之后的基本流程:
解析html以构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树
如果前端相应正常,网络传输正常,就是后端相应的问题了,这时候就要去服务器看nginx和Tomcat的日志
所有的请求都是先到nginx,nginx记录的是所有的请求的出入时间。然后再分发给后面的Tomcat,jetty,resin等容器。nginx不管是域名还是跨域,还是防止Ddos攻击,都很好用。还能同时配置多个服务器还能做负载均衡。
Tomcat后面基本上就是java人员所写的代码了,所以对于后端人员来说,就是对后端的代码进行优化
而Tomcat再进行优化,就是看controller层和service层了。
controller控制service,所以主要做事情的也是service
所以Tomcat响应时间可以分为:
1.Controller的处理时间
2.Service的调用时间
3.返回结果的处理时间
一般而言,我们会写一个AOP的Util。并不会在Controller里手写StartAt和EndAt。
这个Aop一般可以实现的功能为:
如果超过了50MS,记录日志,入参,时间。
如果不超过50MS,不记录。
当然这个50MS是根据每个应用的情况来自行设置的。
(3)常见问题:
Q:为什么我的Tomcat,nginx日志不显示连接时间?
(4)解决方案:
A:默认安装的tomcat,nginx都没有配置连接响应时间,需要自己修改配置文件,在log配置中添加记录时间的配置.
(5)编码实战:
(6)拓展思考:
我们一直说的,一个程序员的真正工作的地方不在笔记本上,也不是在开发环境,也不是在测试环境,而是在线上环境,就是这个道理。 做为一个老程序员来说,对于线上有哪几台服务器,IP是多少,内存是多大,硬盘是多大,CPU是几核的,常用负载是多少,IO有多少,每天增长的日志是多少,DB里的数据库大小是多大,每天的增量是多少,系统中最慢的请求是什么,每天会访问多少次,最快的请求是什么,每天应该访问多少次,每次访问的时候正常应该是在多少MS内返回,一次会取多少条数据,分解到哪几个Service,每个Service的不同时间请求是多少,有多少穿透DB的次数。所有的这些数据都要了如指掌,这样才能够非常快的定位线上的问题。我们不能说这样的程序员是一个水平多厉害的高手,但是他如果做到了这么一点,他就是一个久经沙场的老兵,这样才像是一个职业的工程师。
(7)参考文献:
https://zhuanlan.zhihu.com/p/26362431
(8)更多讨论:
Q1:孔晓平:tomcat和nginx具体的配置在哪?
A1::回答:
tomcat: server.xml文件:
%D - 处理请求的时间(以毫秒为单位)
%T - 处理请求的时间(以秒为单位)
nginx: nginx.conf文件:
$upstream_response_time #请求过程中,upstream响应时间
$request_time #处理完请求所花时间,以秒为单位
Q2::F12怎么看?
A2::浏览器打开按F12刷新即可,看不懂可以参考官方文档:
https://developers.google.com/web/tools/chrome-devtools/network/reference#timing-explanation
Q3::还有什么别的方法看接口响应时间:
A3:postman可以作为参考:
(9)鸣谢:
感谢各位师兄,此教程是在他们之前技术分享的基础上完善而成。
(10)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
[上海|结业弟子]JAVA-徐元祥 发表于 2019-07-15 14:12:12 #1
可以可以,讲的挺好
回复