升级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…

表单元素

一、form form代表表单&#xff0c;功能&#xff1a;用于申明表单&#xff0c;定义采集数据的范围&#xff0c;也就是<form>和</form>里面包含的数据将被提交到服务器或者电子邮件里。<form> 标签用于为用户输入创建 HTML 表单。表单能够包含input元素&#…

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

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

增加 jQueryValidate的手机号验证功能

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

C++的STL中accumulate的用法

https://blog.csdn.net/u011499425/article/details/52756242

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

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

锁 mysql_Mysql的锁(S锁和X锁的区别)

共享锁和排它锁Mysql的锁系统&#xff1a;shared lock 和 exclusive lock (共享锁和排它锁&#xff0c;也叫读锁和写锁&#xff0c;即read lock和write lock)读锁是共享的&#xff0c;或者说是相互不阻塞的写锁是排他的&#xff0c;一个写锁会阻塞其他的写锁和读锁在实际的数据…

爬取新闻

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库&#xff0c;爬取校园新闻首页新闻的标题、链接、正文。 fo…

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

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

【简记】HTML CSS 的一些要点(不定时更新)

1.td占据多行 / 列时&#xff0c;其挤开的 td 不写&#xff08;但是包裹 td 的 tr 要写&#xff09; 2. display:td 的元素中的文本默认垂直不居中&#xff08;table中的td中的文本是垂直居中的&#xff09; 3.th虽然定义了表头标题&#xff0c;但是默认不跨行&#xff08;需…

通过地址访问 mysql_MySql通过ip地址进行访问的方法

1.登录mysql&#xff1a;mysql -u root -h 127.0.0.1 -p2.切换数据库use mysql3.授权grant all privileges on *.* to root127.0.0.1identified by 密码;将127.0.0.1换成公网的ip地址。4.检查my.ini4.1 看看是否有skip-networkingskip-networking开启该选项后就不能远程访问MyS…

幻像类型提高了编译时的安全性

介绍 使用幻像类型是一种非常简单的技术&#xff0c;可用于提高代码的编译时安全性。 有许多潜在的用例具有不同的复杂性级别&#xff0c;但是即使幻像类型的使用非常轻巧&#xff0c;也可以显着提高编译时的安全性。 幻像类型只是带有未使用类型参数的参数化类型。 例如&#…

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

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

字符串的预处理

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

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

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

apache gobblin mysql_gobblin简单使用

一、下载编译解压后查看目录下是否存在gradle/wrapper/gradle-wrapper.jar 文件使用 ./gradlew build -x findbugsMain -x test -x rat -x checkstyleMain编译项目(因网络因素可能有几次失败)编译后文件apache-gobblin-incubating-bin-0.14.0.tar.gz二、配置编写启动命令(需指定…

liunx之Centos6.8杀毒软件的安装

作者:邓聪聪 为了防止服务器中病毒&#xff0c;安装了类似与Windowns的杀毒软件Clanav&#xff0c;过程如下 首先下载clamav的软件包&#xff0c;官方下载地址为http://www.clamav.net/download.html 。我这里是下载好的rpm包链接&#xff1a;https://pan.baidu.com/s/1n052Udk…