阿里终面为什么应用刚启动的时候比较卡,过一会就好了?
不知道大家有没有遇到过类似的问题,应用在刚刚启动之后,前几次访问都会比较卡顿,RT都会比极高,在运行一段时间之后,就会顺畅很多了。
这背后的原因是什么呢?
今天给大家介绍一种可能的原因,也是一种经常被别人忽略的原因,也是我们线上环境遇到过很多次的问题,那就是和JIT有关的。 JIT编译
我们知道,想要把高级语言转变成计算机认识的机器语言有两种方式,分别是编译和解释,虽然Java转成机器语言的过程中有一个步骤是要编译成字节码,但是,这里的字节码并不能在机器上直接执行。
所以,JVM中内置了解释器(interpreter),在运行时对字节码进行解释翻译成机器码,然后再执行。
解释器的执行方式是一边翻译,一边执行,因此执行效率很低。为了解决这样的低效问题,HotSpot引入了JIT技术(Just-In-Time)。
有了JIT技术之后,JVM还是通过解释器进行解释执行。但是,当JVM发现某个方法或代码块运行时执行的特别频繁的时候,就会认为这是"热点代码"(Hot Spot Code)。然后JIT会把部分"热点代码"翻译成本地机器相关的机器码,并进行优化,然后再把翻译后的机器码缓存起来,以备下次使用。
这也是HotSpot虚拟机的名字的由来
那么,这和我们今天要讲的问题有啥关系呢?
大家理解了JIT编译的原理之后,其实可以知道, JIT优化是在运行期进行的 ,并且也不是Java进程刚一启动就能优化的,是需要先执行一段时间的,因为他需要先知道哪些是热点代码。
所以,在JIT优化开始之前,我们的所有请求,都是要经过解释执行的,这个过程就会相对慢一些。
而且,如果你们的应用的请求量比较大的的话,这种问题就会更加明显,在应用启动过程中,会有大量的请求过来,这就会导致解释器持续的在努力工作。
一旦解释器对CPU资源占用比较大的话,就会间接的导致CPU、LOAD等飙高,导致应用的性能进一步下降。
这也是为什么很多应用在发布过程中,会出现刚刚重启好的应用会发生大量的超时问题了。
而随着请求的不断增多,JIT优化就会被触发,这就是使得后续的热点请求的执行可能就不需要在通过解释执行了,直接运行JIT优化后缓存的机器码就行了。 如何解决
那么,怎么解决这样的问题呢?
主要有两种思路:
1、提升JIT优化的效率
2、降低瞬时请求量
在提升JIT优化效率的设计上,大家可以了解一下阿里研发的JDK——Dragonwell。
这个相比OpenJDK提供了一些专有特性,其中一项叫做 JwarmUp 的技术就是解决JIT优化效率的问题的。
这个技术主要是通过记录Java应用上一次运行时候的编译信息到文件中,在下次应用启动时,读取该文件,从而在流量进来之前,提前完成类的加载、初始化和方法编译,从而跳过解释阶段,直接执行编译好的机器码。
除了针对JDK做优化之外,还可以采用另外一种方式来解决这个问题,那就是做预热。
很多人都听说过缓存预热,其实思想是类似的。
就是说在应用刚刚启动的时候,通过调节负载均衡,不要很快的把大流量分发给他,而是先分给他一小部分流量,通过这部分流量来触发JIT优化,等优化好了之后,再把流量调大。
总结
本文介绍了一下JIT优化的时机以及原理,我们今天讨论的问题不是JIT优化导致的,而JIT优化的出现恰恰是要解决这样的问题的。
但是这个知识点却和JIT优化息息相关。或者说有些问题JIT优化并没办法彻底解决,我们可以帮助JIT优化做一些优化。
本人花费2个月时间,整理了一套JAVA开发技术资料,内容涵盖java基础,分布式、微服务等主流技术资料,包含大厂面经,学习笔记、源码讲义、项目实战、讲解视频。
希望可以帮助一些想通过自学提升能力的朋友,领取资料,扫码关注一下
记得转发+关注+私信
私信回复【2022面试资料】
领取更多学习资料
程维销声匿迹两个月,他能为滴滴做些什么?距离滴滴下架已经快两个月了,这款曾经火遍大江南北的APP逐渐没了消息。这两个月内谁最急?那还得是程维,据说程维在部委约谈的时候都哭了,一个大男人,当众落泪,这个时候流出眼泪,是不是
VIVO投资49亿元建人才房?小米花7亿建公寓,巨头们想干啥?vivo芯片研发中心成立,年薪百万招芯片专家8月24日消息,据界面新闻报道,总投资超49亿元的vivo人才房目前已开始动工。来自东莞滨海湾新区公布的项目介绍显示,8月20日,滨海湾
加密货币资产或在5年内取代法定货币四大会计师事务所之一德勤(Deloitte)的一项调查发现,大多数金融专业人士预计,数字资产将在10年内取代政府发行的货币,或至少提供一个可靠的替代货币。受访者表示,有鉴于此,金融
特斯拉Cybertruck将成为马斯克的一场灾难?自2019年11月以来,特斯拉旗下最常被讨论的电动汽车是Cybertruck。马斯克的第一辆皮卡发布震惊了几乎所有收看直播活动的人,然而,尽管到目前为止cybertruck已经有超
200元价位天花板无感佩戴超低延迟,双设备同联竟然还有APP防丢真无线蓝牙耳机的出现,让人们彻底摆脱了有线的束缚,使用起来更加方便,被越来越多的人们所接受和喜爱。随着市场的大火,各大小厂商纷纷推出各自的产品抢占份额。价格上从几十到上千,类型上从
499元大师级调音小米高端智能音箱XiaomiSound体验2021年8月10日,小米发布了一款全新的智能音箱产品XiaomiSound,这款音箱从命名上也能看出与此前小米推出的小爱音箱是有区别的,XiaomiSound在音质方面有着更好的
机海战术来袭,小米12和12Pro提前曝光,相机屏幕升级年底发布且不说小米下半年已经发布的新机,单单是已经曝光的新机已经达到了数款。最近官宣的有小米11T系列两款,红米10Prime一款,都是在9月份发布,这两个型号主要是面向海外市场。此前曝光
XDM觉得手机屏幕尺寸多少最合适呢?手机现在承担的功能越来越多,所需的屏幕也越来越大,特别是12promax这个怪兽,78mm的宽度加直角边,220多克的重量,上手一会,立马放弃,对我的小拇指压力真的大啊,如果贴膜戴
怎样才能把视频拍摄得美?近几年来,视频的流量超级大,在追求短平快的后疫情时代,社畜们的压力和焦虑排解口除了游戏,最多的也就是短视频和中视频了。如何把视频拍美?老于有几点小建议,从业20多年来,从胶卷时代到
目前主流安卓手机有什么差异性吗?文小伊评科技当然还是有的。硬件同质化并不只是体现在手机行业,电视,冰箱,空调等各行各业其实都广泛存在,只不过由于这些商品存在一定的信息不对等,所以才会显得比较神秘。而手机则不一样,
学软件开发需要有什么基础?欲知需要什么?最好先知道包含什么?从概念上来说,软件开发就是根据用户要求建造出软件系统或者系统中的某个软件部分的过程。也是一项包括需求捕捉需求分析设计编码测试和实施的系统工程。软件