带你读《Apache Tomcat的云原生演进》——GraalVM static compilation in web container application(4)

本文涉及的产品
云原生网关 MSE Higress,422元/月
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
简介: 带你读《Apache Tomcat的云原生演进》——GraalVM static compilation in web container application(4)

带你读《Apache Tomcat的云原生演进》——GraalVM static compilation in web container application(3)https://developer.aliyun.com/article/1377533

3. 静态编译助力Java Web容器云原生化

image.png

Tomcat通过分层架构让应用能够比较好的被托管,处理请求,返回响应。目前Tomcat 9版本已经适配了GraalVM的静态编译技术,能够实现开箱即用的效果。下面展示一个小的demo。

 

这是一个最简单的Java Web的应用,我们用的Spring Boot,它里面依赖的是Tomcat 10内嵌的版本。这个demo很简单,就是一个http接口,正常应用启动的过程大概用了两秒多的时间。

 

下面来看一下这个应用程序能否正常执行,可以看到它请求打印出了响应。再来看一下Java Web应用运行时内存的占用情况,可以看到它在运行过程中用了110M的内存,启动时间大概是两秒多。

 

我们再来看一下它静态编译之后,运行时内存占用和启动时间的改善情况。现在通过Spring Boot的版本内嵌了Tomcat之后,Spring Boot通过集成GraalVM的一些组件,通过一行命令,我们就可以对我们的应用进行静态编译了。现在我们的应用通过刚才的那一条命令就已经开始进行静态编译了。它会有一些初始化,做一些分析等等,这个过程可能会花个几分钟。

 

整个静态编译过程就是Java Web应用在运行前做一下静态编译就好了,然后运行的过程中可能通过镜像、包的方式,都可以比较简单运行静态编译之后的Java Web应用。

 

现在它就开始执行相关的静态分析了,静态分析在整个静态编译过程中是一个比较耗时的过程。后续的步骤是编译过程中的,比如方法的解析,内敛一些方法,编译一些方法等等。

 

整个静态编译过程和我们的应用也有关,较大的应用编译时间可能也会更长一点,小的应用则会短一点。但编译时间不会影响应用的静态编译,因为我们不需要每改没改一行代码,就去做静态编译。只要应用里的动态特性能够被正常配置,假如不是写动态特性的东西,测试的时候可以不用做静态编译,运行的时候做即可。

 

现在静态编译已经完成了,它实际用了2分26秒的时间。静态编译完之后,在应用Topic目录下面,就有一个可执行的文件了,它就是静态编译的结果。我们直接执行这个文件,就可以启动我们的应用了,这一次的耗时是0.17秒,刚才是2秒多。现在通过静态编译之后,让Java应用/Java Web应用的启动时间,变成了原来的1/10还不到了。

 

下面看一下我们程序的执行逻辑,刚才看到请求能够被正常响应。再来看一下应用运行时的内存占用,可以看到一开始是110.7M,现在只有30M。在运行时内存占用方面,通过静态编译的方案,让Java web应用得到了显著的改善。

 

image.png 

 

现在静态编译相关的技术,在Java/Java Web领域得到了很大程度的推广和应用。微服务方面,比如国内的Spring Cloud、Dubbo,还有一些其他的组件,在静态编译方面都做了适配,让大家能够比较方便使用。

 

上图是我们测试的一些比较复杂的demo,可以看到不光是简单的应用,复杂的应用通过静态编译之后,它的启动时间、运行时内存占用也都有非常明显的改善。

相关文章
|
3月前
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
|
17天前
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
39 0
|
1月前
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
37 3
|
2月前
|
Java API Apache
从零到英雄的蜕变:如何用Apache Wicket打造你的第一个Web应用——不仅是教程,更是编程之旅的启航
【9月更文挑战第4天】学习Apache Wicket这一开源Java Web应用框架是一段激动人心的旅程。本文将指导你通过Maven搭建环境,并创建首个“Hello, World!”应用。从配置`pom.xml`到实现`HelloWorldApplication`类,再到`web.xml`的设置,一步步教你构建与部署简单网页。适合初学者快速上手,体验其简洁API与强大组件化设计的魅力。
58 1
|
3月前
|
负载均衡 应用服务中间件 Apache
Nginx与Apache的终极对决:揭秘Web服务器界的“速度与激情”!你不可不知的性能霸主如何颠覆传统,震撼互联网的根基!
【8月更文挑战第13天】互联网技术发展中,Web服务器至关重要,Nginx与Apache是最广泛使用的两种。Apache历史悠久,但Nginx以轻量级和高性能脱颖而出。Nginx采用事件驱动架构,高效处理大量并发连接,而Apache使用进程驱动,高并发下资源消耗大。以餐厅为例,Nginx像大堂经理同时处理多个顾客需求,远比Apache为每位顾客分配服务员更高效。性能测试显示Nginx处理能力远超Apache。此外,Nginx配置简洁灵活,尤其在负载均衡方面表现突出。尽管Apache适合动态内容处理,但在快速变化的互联网环境中,Nginx因其独特优势成为许多开发者和企业的首选。
65 7
|
3月前
|
Java Spring Apache
Spring Boot邂逅Apache Wicket:一次意想不到的完美邂逅,竟让Web开发变得如此简单?
【8月更文挑战第31天】Apache Wicket与Spring Boot的集成提供了近乎无缝的开发体验。Wicket以其简洁的API和强大的组件化设计著称,而Spring Boot则以开箱即用的便捷性赢得开发者青睐。本文将指导你如何在Spring Boot项目中引入Wicket,通过简单的步骤完成集成配置。首先,创建一个新的Spring Boot项目并在`pom.xml`中添加Wicket相关依赖。
95 0
|
3月前
|
Apache 开发者 Java
Apache Wicket揭秘:如何巧妙利用模型与表单机制,实现Web应用高效开发?
【8月更文挑战第31天】本文深入探讨了Apache Wicket的模型与表单处理机制。Wicket作为一个组件化的Java Web框架,提供了多种模型实现,如CompoundPropertyModel等,充当组件与数据间的桥梁。文章通过示例介绍了模型创建及使用方法,并详细讲解了表单组件、提交处理及验证机制,帮助开发者更好地理解如何利用Wicket构建高效、易维护的Web应用程序。
46 0
|
3月前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
45 0
|
3月前
|
前端开发 JavaScript 开发者
革命性的飞跃:Apache Wicket新特性大揭秘,让你的Web开发之旅如虎添翼!
【8月更文挑战第31天】Apache Wicket作为一个成熟的Java Web框架,持续进化以适应现代Web开发需求。本文介绍Wicket的最新特性,包括响应式布局支持、组件化与模块化开发、异步请求处理、增强的表形处理以及与现代JavaScript框架的集成。通过具体代码示例展示如何利用这些特性构建高效、灵活且用户友好的Web应用程序。
45 0
|
3月前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
104 0

推荐镜像

更多