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

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
简介: 带你读《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,可以看到不光是简单的应用,复杂的应用通过静态编译之后,它的启动时间、运行时内存占用也都有非常明显的改善。

相关文章
|
6月前
|
Java 应用服务中间件 Apache
Maven程序 tomcat插件安装与web工程启动
Maven程序 tomcat插件安装与web工程启动
69 0
|
4月前
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
|
4月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
138 0
|
6月前
|
XML 网络协议 Java
JavaWeb -- HTTP -- WEB服务器TOMCAT
JavaWeb -- HTTP -- WEB服务器TOMCAT
|
2月前
|
Java 应用服务中间件 Apache
浅谈Tomcat和其他WEB容器的区别
Tomcat是一款轻量级的免费开源Web应用服务器,常用于中小型系统及并发访问量适中的场景,尤其适合开发和调试JSP程序。它不仅能处理HTML页面,还充当Servlet和JSP容器。相比之下,物理服务器是指具备处理器、硬盘等硬件设施的服务器,如云服务器,其设计目标是在处理能力、稳定性和安全性等方面提供高标准服务。简言之,Tomcat专注于运行Java应用,而物理服务器则提供基础计算资源。
|
4月前
|
网络协议 Java 应用服务中间件
Tomcat源码分析 (一)----- 手撕Java Web服务器需要准备哪些工作
本文探讨了后端开发中Web服务器的重要性,特别是Tomcat框架的地位与作用。通过解析Tomcat的内部机制,文章引导读者理解其复杂性,并提出了一种实践方式——手工构建简易Web服务器,以此加深对Web服务器运作原理的认识。文章还详细介绍了HTTP协议的工作流程,包括请求与响应的具体格式,并通过Socket编程在Java中的应用实例,展示了客户端与服务器间的数据交换过程。最后,通过一个简单的Java Web服务器实现案例,说明了如何处理HTTP请求及响应,强调虽然构建基本的Web服务器相对直接,但诸如Tomcat这样的成熟框架提供了更为丰富和必要的功能。
|
4月前
|
Kubernetes 安全 Serverless
Kubernetes云原生问题之在Serverless Container中,Pod运行如何解决
Kubernetes云原生问题之在Serverless Container中,Pod运行如何解决
78 5
|
4月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
85 3
|
4月前
|
应用服务中间件
2022年最新最详细在IDEA中配置Tomcat(含有详细图解过程)、建立使用IEDA建立一个Web项目的案例
这篇文章提供了在IntelliJ IDEA中配置Tomcat服务器的详细步骤,包括添加Tomcat Server、选择安装路径、添加项目Artifact,以及创建和展示Web项目的流程。
|
6月前
|
Java 应用服务中间件 Apache
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
167 7

推荐镜像

更多
下一篇
DataWorks