升级glibc的影响_Java 11 升级:“债务”“危机”

导读:AJDK11(阿里内部基于openJDK11的定制版本)在19年3月左右发布,到现在也快1年了,不过目前整体使用的面还是比较窄,特性被了解的也不是很多,Java11作为OpenJDK发布的LTS版本,对我们来说,还是需要去拥抱和熟悉的,所以从目前的Java8升级到Java11,是一件不紧急但是重要的事情。

e28b2016226c67b34366175933f0422b.png

作者 | 江丹阳(Mario)

责编 | 屠敏

头图 | CSDN 下载自视觉中国

来源 | 淘系技术(ID:AlibabaMTT)

e78ce4b74cccba2bc94bf93c1761e7c4.png

一说升级

▐ 运行环境升级

环境升级,主要是alios7(内部Linux 7u2的定制版) + ajdk11(当前比较稳定的版本是ajdk-11_0_4_5-b71),这个升级通过修改应用APP-META目录中的dockerfile可以完成;

▐ 构建插件升级

构建插件的升级主要是maven compile插件的升级,需要升级到3.8.0版本,pandora-boot的maven插件升级到2.1.11.9,依赖如下:

b10f940ca9659d58082d2dfc7458103d.png

同时将编译的目标文件和源文件的编译版本指定下:

142cd314c55e5b4d799b417c5d516b48.png

▐ 框架升级

主要是springboot和pandoraboot的升级,同时还有pandora sar包的升级:

22c9723ba44a58ddb2d674d0f9bdf3c1.png

▐ 依赖升级

在Java11中移除了一些模块,所以在做升级的时候,需要看需求手动进行依赖,主要有如下几个:

0352a494ff2512254a19de7d0f99b0f1.png

▐ 运行脚本升级

这里的脚本升级主要是一些jvm的启动参数兼容问题,比如debug option,还有gc日志打印相关的option,主要修改appctl.sh和setenv.sh两个脚本。

比如java9以前的GC日志打印是:

-Xloggc:${MIDDLEWARE_LOGS}/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"

Java9以后就是:

-Xlog:gc*:${MIDDLEWARE_LOGS}/gc.log:time"

release文件更新:

主要是指定新的ajdk的版本,以及maven的版本(3.5.0及以上)。

ee8e8c088084d612ec8c8800dca5e0e0.png86f021a17cf56b53409c14f831acf9f3.png

二诉“债务”

之前有和一些升级过的同学沟通过,这个Java11的升级还是比较平滑、顺利,没有太多成本,但是这次走起来其实还是克服了不少困难,不是本身Java11升级的问题,而是历史的债务在Java11升级的过程中都暴露了出来。

▐ Linux版本

Linux 版本 7u2 出来已经5年多了,目前集团所有的线上和线下的宿主机的系统都是alios7,所以很难想象现有的系统在docker里面依赖的是5u7的linux基础镜像,这里面会有一个比较严重的性能问题:

因为7u2的glibc去掉了vsyscall改成vdso,5u7的glibc还是保留vsyscall,就需要有一个内核接口来模拟,这个模拟是有严重性能问题的,sys%会非常高。

所以没有升级的赶紧升级下吧,使用裁剪版本(alios7u2-min),体积可以从原来的5u7 2G多到500M多,这个大小的优化能提升的东西不做赘述。

▐ 本地启动

本地启动,好多开发同学可能都没有用过,所以起不来也不是一件很难想象的事情,那问一个问题:为什么做pandoraboot升级?为什么做boot化?boot化带来了哪些价值?给我们带来了哪些改变?我觉得这些问题在最开始推微服务的时候,大家都是很关注的,但是当后面微服务成为趋势,pandoraboot或springboot成为微服务框架之后,之前的问题就没人关注了。

应用owner还是看看自己的boot化应用是否能启动吧,本地启动、本地调试可以节省的开发调试时间谁用谁知道吧。

▐ autoconfig

老生常谈的问题,这个属于时代产物了,在架构演进过程中一直被容忍,一直被小心呵护兼容,因为动之成本有点高,协同比较大,说白了就是很难~~~

有理想追求的程序员大家可以聚一起看看怎么落地~~

e404d2dd3861c20e787a1c2f94828d27.png

三叙“危机”

▐ “危”

面试的标准个人看来是越来越高,但是里面的人做事的标准是越来越低,“调包侠”、“拿来主义”、“翻译器”、“施工队”现象也是越来越常见,我只想说,我们是程序员,借用之前比较孤傲的定位,我们是“艺术家”,那什么时候落魄成了我们当初斥责的模样;从现在起,建立危机意识吧。

▐ “机”

事情是升级Java11,获益是Java9到java11的所有的增强和新特性,下面是个人看到的一些利益点,欢迎大家补充。

4ff6aa5e732e88e57182c5502e741291.png

内存优化

Java9中增强了string的底层存储,LATIN1编码的字符串底层存储从原来的char数组变成了byte数据,对于这样指定的字符串的内存使用节省一半,整体内存的节省大概10%(不同应用可能差别比较大)。

▐ HotSpot增强

Java9中引入了HotSpotIntrinsicCandidate这个注释,主要是在使用CPU及OS层面的native方法替换java function,达到性能提升,效果会因为平台和硬件不同有差异,目前主要是在一些基础类的一些高频方法中出现该注解。

▐ GC提升

我们目前使用的是CMS垃圾回收器,相当好,我们也用了很长一段时间了,不过CMS随着发展,也暴露出两个问题,一个是面向大内存的回收效率会下降比较明显,同时回收的时长不可控;在后续的Java9中的G1和Java11中ZGC相继出现,就是针对上述两个方向进行的优化。

升级了Java11,其实不一定要用ZGC,因为目前我们大部分应用的配置是4c8g,有人做过性能测试,在8G以下,CMS的回收性能会比ZGC还好一点,8G的情况下差不多,那么8G以上,ZGC会的性能会比较好,同时他的回收效率受内存大小的持续上升影响较小;目前我们有些核心应用的配置是8c16G的,所以这块GC的增强还是有收益的。

1a2f5dc8f373cdaa66873dc000fd440e.png

FaaS化

FaaS最近一段时间都是一个蛮热的话题,不过距离整体在现有业务场景中广泛应用,还有一段时间;那升级Java11和FaaS化有什么关联呢?

个人感觉是两个方面:

  1. 模块化;

  2. graalVM。

FaaS要支持在线业务的核心关键在于Function的快速分发、运行环境快速拉起来达到低延迟反馈,所以模块化可以让应用足够小,graalVM可以提前将非动态Java代码编译成native image,提升启动速度同时减少整体App的大小;

58ee2f4c32c9a23d936f511f66bd18f2.png

趋势

从Java 11开始,OpenJDK major version的发布间隔差不多是半年,不用全部都要去关注,都是追赶,但是LTS版本,需要去追赶,去升级,Java11就是最新的LTS版本,下一个或者再一下major version,很可能又是一个LTS版本;虽然目前使用Java 8都挺好的,现实是Java 8的一些特性会被往后移植,但是后续版本的特性和优化不会再被集成到Java 8中了,势不可逆,跟不上就快要被淘汰了。

4eabcb53cbfef1ecc63ebb3aa932c38f.png

结语

Java 11的升级带来的收益还是可圈可点的,整体过程也还顺滑,没有兼容性问题,感兴趣的同学可以尝试升级,并且关注一些指标变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

The processing instruction target matching [xX][mM][lL] is not allowed.

原因:xml标签 必须在第一行。 转载于:https://www.cnblogs.com/wangkang0320/p/7569100.html

周五尾盘上涨,配合周末消息,周一套人的经典实例

吸取中国软件的教训:注意这次是温柔的,只是收了个十字星,因为前期上涨后的需要缓和调整一下,而不是为了出逃。以后注意找个出逃的例子1、上周五尾盘上涨2、周末利好消息3、周一开盘高开4、高开后快速下探(5分钟内&…

Spring Data,MongoDB和JSF集成教程

示例应用程序简介(MongoShop产品目录) 在学习完本教程之后,将构建具有以下功能要求的示例应用程序(MongoShop产品目录): 1.搜索具有不同条件的产品(例如,sku,产品类型&am…

本人用python刷题时的错误总结

本人新手,在leetcode刷题过程中出现过很多问题,也发现了很多方法,故在此总结,不定时更新。 1、在创建一个二维列表的时候,我之前会用 a [[0] * 5] * 5, 但是这样输出的结果往往会跟期待的不一样,我一直以为…

增加 jQueryValidate的手机号验证功能

1、通过addMethod增加手机号的验证方法 (位置:和$(form).validate({}) 同级别) //增加手机号验证规则$.validator.addMethod("isMobile", function(value, element) {var length value.length;var mobile /^(13[0-9]{9})|(18[0-9…

Hibernate继承:每个类层次结构的表

在本教程中,我们将看到如何在hibernate中实现继承。有3种方法可以在hibernate中实现继承。在本文中,我们将看到其中一种,即每个类层次结构一个表。 休眠中的继承: Java是面向对象的语言,继承是Java的主要功能之一。关…

爬取新闻

import requests from bs4 import BeautifulSoup urlhttp://news.gzcc.cn/html/xiaoyuanxinwen/ resrequests.get(url) res.encodingutf-8 soupBeautifulSoup(res.text,html.parser) 1. 用requests库和BeautifulSoup库,爬取校园新闻首页新闻的标题、链接、正文。 fo…

平衡二叉树的自顶向下递归和自底向上递归

没太搞懂自顶向下和自底向上的递归区别

NI Multisim元件库:在Multisim中创建自定义元器件

转载于: http://www.ni.com/tutorial/3173/zhs/ 概览 「在Multisim中创建自定义元器件」与「在 NI Ultiboard中创建自定义元器件」为您提供了关于如何直观、快速地学习如何创建您自己的自定义元器件的信息资源。目录 引言步骤一:输入初始元器件信息步骤二…

字符串的预处理

C isalpha、isalnum、islower、isupper用法 https://blog.csdn.net/weixin_41162823/article/details/80172379 C/C库函数(tolower/toupper)实现字母的大小写转换 https://blog.csdn.net/laozhuxinlu/article/details/51539737 字符串的逆序 https:…

2017年最新基于Bootstrap 4 的专业、多用途响应式布局的系统模板

本文分享一款2017年最新的2017年最新基于Bootstrap 4 的专业、多用途响应式布局的系统模板,该模板是一款强大并且非常灵活的后台管理系统模板:能适应绝大多数的web应用程序开发,比如:APP的管理后台,电商网站&#xff0…

您的日志就是您的数据:logstash + elasticsearch

今天的帖子的主题与日常的编码和开发无关,但是涵盖了一个非常重要的主题:我们的应用程序日志文件。 我们的应用程序确实会生成大量日志,如果处理正确,则非常有助于解决问题。 如果您启动并运行一个应用程序并没什么大不了&#xf…

关于C++中二维vector使用

https://blog.csdn.net/u014453443/article/details/98057251

面向对象设计与构造第一次总结作业

第一次作业——多项式计算 ---结构分析 第一次作业我只使用了两个类,正像下面的类图所表示的那样,分别是Poly和ComputePoly。Poly类是不可变的,能保存一个多项式,可以进行加、减运算。ComputePoly是程序的主类,能够读取…

python字符串常见操作

字符串常见操作 如有字符串mystr hello world itcast and itcastcpp&#xff0c;以下是常见的操作 <1>find 检测 str 是否包含在 mystr中&#xff0c;如果是返回开始的索引值&#xff0c;否则返回-1 mystr.find(str, start0, endlen(mystr))<2>index 跟find()方法…

调整图像的灰度级数C++实现

图像灰度级数我们见得最多的就是256了&#xff0c;如果想调整它的灰度级数&#xff0c;我们可以使用图像库的imadjust函数来作出调整&#xff0c;比如讲256个灰度级变成2个灰度级&#xff08;也就是二值图了&#xff09;。再举一个例子&#xff0c;原来一幅256个灰度级的图像&a…

[BZOJ2095][Poi2010]Bridges 最大流(混合图欧拉回路)

2095: [Poi2010]Bridges Time Limit: 10 Sec Memory Limit: 259 MBDescription YYD为了减肥&#xff0c;他来到了瘦海&#xff0c;这是一个巨大的海&#xff0c;海中有n个小岛&#xff0c;小岛之间有m座桥连接&#xff0c;两个小岛之间不会有两座桥&#xff0c;并且从一个小岛…

excel和python建模_利用Excel学习Python:准备篇

写在前面这个系列我们要利用Excel的知识&#xff0c;学会用python进行数据分析&#xff0c;如果你精通Excel想要用python提高数据分析效率&#xff0c;那么这个系列你来对了&#xff0c;如果你已经是python大神&#xff0c;想要建模/算法等高级技巧的&#xff0c;这个系列可能不…

方法内联在JVM中有多积极?

IntelliJ IDEA中使用Ctrl Alt M 提取方法 。 Ctrl Alt M。 这就像选择一段代码并按此组合一样简单。 Eclipse也有它 。 我讨厌冗长的方法。 对于我来说&#xff0c;闻起来太久了&#xff1a; public void processOnEndOfDay(Contract c) {if (DateUtils.addDays(c.getCrea…