首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Quarkus本机可执行内部版本:高内存消耗

Quarkus 本机可执行内部版本:高内存消耗

基础概念

Quarkus 是一个为 Kubernetes 设计的 Java 框架,旨在简化 Java 应用程序的开发、部署和运行。Quarkus 支持多种编程模型,包括 RESTful Web 服务、GraphQL、gRPC 等。Quarkus 的本机可执行文件是通过 GraalVM 编译生成的,可以在没有 JVM 的情况下运行,从而提高启动速度和减少资源消耗。

相关优势

  1. 快速启动:本机可执行文件启动速度快,适用于无服务器架构和容器环境。
  2. 低资源消耗:相比传统的 JVM 运行时,GraalVM 编译的本机可执行文件通常有更低的内存和 CPU 消耗。
  3. 与 Kubernetes 集成:Quarkus 天然支持 Kubernetes,可以轻松部署和管理。
  4. 丰富的扩展生态:Quarkus 有大量的扩展,可以轻松集成各种服务和库。

类型

Quarkus 本机可执行文件主要有以下几种类型:

  • Standalone 可执行文件:独立运行的应用程序。
  • Kubernetes 部署:可以直接部署到 Kubernetes 集群中的应用程序。

应用场景

  • 微服务架构:Quarkus 适合构建轻量级的微服务。
  • 云原生应用:与 Kubernetes 集成良好,适合云原生环境。
  • 无服务器架构:快速启动和低资源消耗使其适合无服务器环境。

高内存消耗问题

原因分析

  1. GraalVM 编译开销:GraalVM 编译过程中可能会生成较大的本机镜像,导致内存消耗增加。
  2. 第三方库和扩展:某些第三方库或 Quarkus 扩展可能会增加内存消耗。
  3. 应用程序逻辑:应用程序本身的复杂性和数据处理量也会影响内存消耗。

解决方法

  1. 优化 GraalVM 编译配置
    • 使用 quarkus.native.additional-build-args 配置项来优化编译参数。
    • 使用 quarkus.native.additional-build-args 配置项来优化编译参数。
  • 精简依赖
    • 检查并移除不必要的依赖和扩展。
    • 检查并移除不必要的依赖和扩展。
  • 内存管理
    • application.properties 中配置 JVM 内存参数。
    • application.properties 中配置 JVM 内存参数。
  • 监控和分析
    • 使用工具如 Prometheus 和 Grafana 监控应用程序的内存使用情况。
    • 使用 Java 分析工具如 VisualVM 或 JProfiler 分析内存消耗。

参考链接

通过以上方法,可以有效减少 Quarkus 本机可执行文件的内存消耗,提高应用程序的性能和稳定性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Quarkus云原生java框架简介(1)

前言 Quarkus 是小红帽开源的专门针对云容器环境优化的云原生java框架,目前已迭代到1.6.0版本,已完成了大部分的框架库的集成扩展,为了让你低成本迁移到Quarkus来,它兼容主流的框架开发模式...3、为了方便开发人员的工作,Quarkus 还包含以下功能: 实时编码,旨在让开发人员能够即时检查代码更改的影响并快速进行故障排除 带有嵌入式托管事件总线的统一命令式和响应式编程 统一配置 简单的原生可执行文件生成...容器优先 无论是将应用托管在公共云上还是内部托管的 Kubernetes 集群中,快速启动和低内存消耗等特性对于降低总体主机成本来说都至关重要。...Quarkus 的开发遵从了容器优先的原则,这意味着它已通过以下方式针对降低内存使用和加快启动时间进行了优化: 鼎力支持 Graal/SubstrateVM 构建时元数据处理 减少反射的使用 本机映像预启动...因此,Quarkus 构建的应用其内存消耗只有传统 Java 的 1/10,而且启动时间更快(快了 300 倍),这些都大大降低了云资源的成本。

43140

2020年你将会选择哪个微服务框架?

Quarkus的目标是通过在容器编排平台中允许更快的启动,较低的内存消耗和近乎即时的扩展来使Java成为Kubernetes中的领先平台。...本机映像的启动时间在1.39秒(Quarkus)和1.46秒(使用JDBC的Micronaut)之间,比OpenJDK实现要快得多。 所有框架运行时使用的内存使用情况非常相似。...各种Micronaut实现介于两者之间,与JDBC相比,JPA和本机映像比OpenJDK略有优势。 在内存使用方面,OpenJDK上的Quarkus表现出色,仅消耗255 MB内存。...在OpenJDK中运行的JPA实现平均使用880 MB,比Spring的内存使用量50%以上。但是,使用JDBC和本机映像有助于Micronaut将其内存占用空间减少到367.8 MB。...但是,在负载下,它们即使在作为本机映像运行时也无法提供太多优势。

2.8K11
  • Quarkus是Java的未来吗?

    这就是为什么有人已经将Quarkus视为Java的未来。 它旨在允许开发所谓的云原生Java应用程序或" Kubernetes本机"以使用其术语。...本机编译 通过使用GraalVM提供的本机编译(从Quarkus.io上的可用数据计算得出的百分比),Quarkus将引导时间减少了约99%,将传统Java应用程序的内存占用减少了约86%。...为了实现这些改进,Quarkus利用GraalVM和容器来构建本机Java可执行文件。然后优化可执行文件以在定义的环境中运行。...基板VM用Java编写,然后编译为本机可执行文件。 ? > From Quarqus.io 由于具有本机可执行文件,因此即使不安装JDK也可以在任何计算机上运行JAVA应用程序。...> From Quarqus.io 结论 Quarkus是针对Java虚拟机(JVM)和本机编译的全栈Kubernetes本地Java框架,专门针对容器优化Java,并使之成为无服务器云(Faas)和Kubernetes

    3.5K20

    云原生时代高性能Java框架—Quarkus(一)

    Quarkus与传统技术栈对比 来自官方的一张图,展示了使用Quarkus框架开发项目和使用传统框架开发的一些运行时数据明细对比,可以看到Quarkus项目在JVM中运行时所消耗内存和接口响应能力要明显好于传统的...而将Quarkus编译成本地可执行文件(本地镜像)之后,其优势可以说非常明显了。 GraalVM简介 GraalVM是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务。...对于Java应用程序,GraalVM可以带来很多有价值的好处:更快地运行它们,通过脚本语言(JavaScript, R, Python...)提供可扩展性或创建提前编译的本机映像(native-image...截至编写本文时,GraalVM的最新版本为20.1.0.r11-grl,所以我们会安装此版本。...幸运的事,随着Quarkus、Helidon等等一些新型Java开发框架的出现缓解了这个局面(以及目前Spring生态也开始了对GraalVM的大力支持),他们使Java变得更加本地化,不管是项目的体量方面还是资源消耗和运行效率方面都有显著提升

    5.1K31

    Kubernetes 上 Java 应用的最佳实践

    该值是根据容器内可见的内存计算的。一旦您不在容器级别设置 limit ,JVM 将看到节点的整个内存。 在 Kubernetes 上运行应用程序之前,您至少应该测量它在预期负载下消耗了多少内存。...假设我们将内存限制设置为 512M,它将在 130M 的级别计算 -Xmx 。 我的应用程序可以吗?我至少应该执行一些负载测试来验证我的应用程序在流量下的性能。...当然,在将现有应用程序迁移到本机编译的过程中存在(现在仍然存在)许多挑战。...例如,使用 Quarkus,您可以简单地生成一个 Maven 配置,其中包含用于构建原生可执行文件的专用配置文件。...>native 添加后,您可以使用以下命令进行本机构建: $ mvn

    17510

    quarkus实战之二:应用的创建、构建、部署

    NativeHobbyResourceIT.java 14 directories, 13 files 先观察pom.xml,看有哪些要注意的配置,首先是dependencyManagement节点,可见为了维护各依赖库的版本关系..., vertx] 浏览器访问服务,正常响应: 制作二进制可执行文件 接下来要体验的是quarkus的特色了:将项目制作成二进制可执行文件 首先请确认当前环境的docker服务正常 其次内存不要太小(在...macbook上试过,可用内存低于4G时报错:Exit code was 137 which indicates an out of memory error) 简单说一下二进制可执行文件是如何制作的:...-Dquarkus.native.native-image-xmx=4096m -Dquarkus.native.container-build=true 首次下载docker镜像会消耗一点时间,另外...秒的启动时间,优秀: 再用系统监视器查看内存情况,5MB,厉害了: 用浏览器访问,响应正常: 至此,java应用制作成二进制可执行文件的操作就完成了,性能的提升确实很明显,关于这个制作的原理和细节不在本文展开

    2K50

    Spring Boot 新特性:节省95%内存占用

    最近比较火的 Java 框架 Quarkus[2] 默认支持 GraalVM 下图为 Quarkus 和传统框架(SpringBoot) 等对比图,更快的启动数据、更小的内存消耗、更短的服务响应。...安装 GraalVM 目前官方社区版本最新为 20.3.0 ,是基于 OpenJDK 8u272 and 11.0.9 定制的,可以理解为 OpenJDK 的衍生版本 。...使用类似命令即可完成指定版本安装和指定默认版本 sdk install java 11.0.9.hs-adpt sdk default java 11.0.9.hs-adpt 不过安装过程中需要从国外下载相关资源...启动应用 这里执行的编译后的可执行文件而不是 jar cd target ....215 ms 参考资料 [1]GraalVM: https://www.graalvm.org [2]Quarkus: https://quarkus.io [3]SDKMAN: https://sdkman.io

    1.2K10

    云原生时代高性能Java框架—Quarkus(二)

    本文将主要指向Quarkus的“亮点”——本地化应用程序。 以下是本文的两个目标: 将Quarkus开发的Java应用程序编译成本地可执行文件。 将本地可执行文件打包到容器中。...容器化本地可执行文件 添加配置 我们要将生成的本地可执行文件进行容器化,所以需要考虑到本地可执行文件对环境的兼容问题,在这里所生成的本地可执行文件的格式应该和docker镜像中的环境兼容了,而不是我们的本机环境...因为不同的操作系统支持的本地可执行文件的格式并不一样,quarkus在生成本地可执行文件的时候会根据不同的操作系统环境而选择不同的可执行文件格式。.../application", "-Dquarkus.http.host=0.0.0.0"] Quarkus使用ubi-minimal镜像作为容器的基础镜像,它是一个通用基本镜像,Dockerfiles使用基本镜像的最小版本来减小生成的镜像的大小...注意:由于我们上一步中在项目的配置文件中添加了quarkus.native.container-runtime=docker,现在我们需要去掉,否则生成的可执行文件格式可能和你本机的格式不兼容。

    1.3K30

    Oracle 将 GraalVM 贡献给 OpenJDK,以解决“采用障碍”

    作者 | 褚杏娟 根据公告,Oracle 正在将 GraalVM 社区版(Java 的本机代码编译器)贡献给 OpenJDK ,但不包括 JavaScript、Python、Ruby、R 和 WebAssembly...另外,GraalVM 版本将与 JDK(Java 开发工具包)版本保持一致,每季度进行重要补丁更新,每年发布两个功能版本,每两年发布一个长期支持版本。...GraalVM 以将 Java 编译成较小的原生可执行文件而闻名,这些原生可执行文件的启动速度要比传统 Java 程序快得多。...原生 Java 编译会使用更少的内存,GraalVM 分发版在 Apple Silicon 运行得更好,并且文件体积更小。 原生编译使 Java 在云中更具竞争力。...如今,Quarkus、Micronaut 和 Helidon 都支持在生产环境中使用 GraalVM。Spring 6 和 Spring Boot 3 计划在今年年底实现这一目标。

    58020

    无服务器和 Kubernetes 原生 Java 部署实践

    与此同时,开发人员和架构师仍然在尽可能地优化应用程序的性能,缩小容器镜像,缩短启动和响应时间以及减少内存占用。他们相信,这最终能够减少应用层的计算消耗。...它们试图从吞吐量管理方面优化 Java 的性能,通过扩展、临时状态及减少不可变系统的内存占用。...生而原生的 Java 构建一个原生可执行的 Java 应用程序不仅有巨大的好处,如启动和响应时间缩短、内存占用变小,而且还解决了传统 Java 技术栈中存在的上述挑战。...下面是一份快速入门指南,介绍如何利用 Quarkus 新建一个使用了原生可执行编译的无服务器函数。...在容器平台上(如 Kubernetes),它提供了比其他任何编程语言都的资源密度,可以帮助组织减少二氧化碳排放,如图 5 所示。

    91320

    为 Java 提速:用 Quarkus 开发 Kubernetes Native Java 应用

    例如,你可以通过反射将每个类标记为可用,从而轻松得到一个原生可执行文件。但结果可能会让人失望:内存使用量和启动时间只比 JVM 上好一点点。...—— Edouard Lamotte,Sedona 由于 Quarkus 及其扩展(Quarkus 优化过的库)包含了构建时优化,所以你可以将任何应用程序构建为一个内存占用较小的本地可执行文件。...此外,Quarkus 使开发者能够轻松编写针对本地可执行文件的测试,确保你构建的东西(本地可执行文件)按预期运行。 我们认为,平台对原生编译的广泛支持对于有效使用该技术至关重要。...这就减少了线程上下文切换,并在最大程度上提高了吞吐量,同时最大程度地减少了资源消耗。 当使用命令式 API 开发时,Quarkus 将工作分派给工作线程,完成后再将工作切换回 I/O 线程。...使用 Quarkus 进行开发的效率非常,Java 开发者可以尝试多种解决问题的方法,并选择对业务最有利的一种。 Quarkus 还将 Kubernetes 视为一等支持平台。

    1.6K30

    支持JDK19虚拟线程的web框架,之五(终篇):兴风作浪的ThreadLocal

    《virtual-threads.adoc》,如下图 我对上述内容的理解: quarkus的人发现:传统线程池模式改用虚拟线程后,性能提升明显,但是反应式框架改用虚拟线程后的提升并不明显,而且还会带来内存消耗过大的问题...(看过前面ThreadLocal分析的您,此刻应该猜到原因了了,嘿嘿,您猜的没错) 如果您的应用对内存有较严要求,quarkus官方建议您继续坚持(stick)使用反应式框架(这话中透露出浓浓的无可奈何...首先,Netty使用了Reactor线程模型,而Netty Reactor的核心是Event Loop,下图来自《Netty in Action》,是处理web请求的内部架构图, 那么,应该有多少个EventLoop...快乐之后,咱们还是要正视这个问题,表面上看是个坑,实际上是两种设计思路的冲突: 虚拟线程的特性类似golang的协程,很适合直接拿来处理并发web请求,为每个请求分配一个虚拟线程,逻辑清晰直白,资源消耗又不高...那就想办法强行让它适合,下图就是quarkus的做法:在构建阶段,找到创建ThreadLocal的那段代码,修改它的字节码,以此来解决前面的内存问题 然后我就翻到了上图提到的那段代码 好奇心驱使,我点开上图那个

    1.1K40

    简洁、高效、灵活:探索 Spring 同级别的编程框架

    从高效的反应式数据库客户端到事件流、消息传递和 Web 堆栈,Eclipse Vert.x 项目涵盖了下图中所有内容: Quarkus 传统的Java堆栈是为单体应用设计的,启动时间长,内存需求大,...受开发者喜爱:一个内聚的平台,统一的配置、生成本地可执行文件简单方便。零配置,瞬间重新加载,简化80%的常用代码,灵活处理剩余的20%。...上图是Quarkus性能测试对比图,可以看到无论是内存占用和响应时间,Quarkus都有很大优势。...Play 建立在 Akka,Play 提供可预测的和最小的资源消耗(CPU,内存,线程)的高度可扩展的应用程序。...易于部署:Dropwizard框架采用可执行Jar包的形式进行打包和部署,可以轻松地在任何环境中运行,例如本地开发机器、云平台或Docker容器等。

    77550

    Leyden 延迟了 OpenJDK AOT 编译器,转而优化 JIT 编译器

    静态镜像来自于对原生可执行文件的提前(Ahead-of-Time,AOT)编译。...它的 GraalVM Native Image 是一个 Java AOT 编译器,如今能够生成原生可执行文件。...与 Java 的 JIT 编译器相比,它们有四个优势,即启动更快、内存和 CPU 占用更低、安全漏洞更少以及文件更小。...但是,Greene 对于在 Quarkus 中使用 jlink 和 JPMS 并没有表现出太高的热情: 截止到目前为止,jlink 只是为基于 JVM 的应用的存储开销带来了好处(不管有没有它,内存开销和启动时间基本上都是一样的...Spring 计划在 2022 年底的 6.0 版本中支持 JPMS,不过 Spring 生态系统可能还不会这样做。而 Quarkus 目前没有计划加入 JPMS。

    89420

    quarkus实战之一:准备工作

    ,花数十秒启动的情况也屡见不鲜,这样的问题无法适应需要快速重启或快速扩容的场景 内存消耗大:曾强行将内存限制在1G,结果FGC频率变大,还经常触发OMMKill导致pod重启,并且启动时间也会变长,相比之下...框架和GraalVM虚拟机,在内存方面对比传统框架有一个数量级的优势,而响应时间差距已不止一个数量级: 容器化的路上,选择quarkus是个不错的选择 本篇概览 作为《quarkus实战》系列的开篇,...本文的目标是为后续文章和编码实战做好准备工作,由以下内容组成: 涉及软件的版本信息介绍 安装JDK-11 安装maven-3.8.4 安装docker 关于kubernetes的安装 新建maven工程...,作为《quarkus实战》系列所有代码的父工程 以上就是今天的内容,先从环境信息开始吧 涉及软件的版本信息介绍 开始操作前,先将我这里的环境信息给出,这是能成功运行《quarkus实战》系列所有功能的环境...的maven工程,目前这里面还是空的,将来会作为整个系列相关源码的父工程,将所有源码和依赖库版本统一管理起来 未完待续 至此,准备工作已完成,quarkus就像一副神秘的山水画卷,在欣宸原创的推动下徐徐展开

    68730

    Java近期新闻:Grails 6.0、PrimeFaces 13.0、JUnit 5.10、GraalVM、新的 JEP 草案

    中交付;JEP 424,外部函数和内存 API(预览版),在 JDK 19 中发布;JEP 434,外部函数和内存 API(第二次预览),在 JDK 20 中发布;以及 JEP 442,外部函数和内存...自上一个版本发布以来的改进包括:一个新EnableNativeAccess 清单属性,允许可执行 JAR 中的代码在不使用--enableNativeAccess标志的情况下调用受限方法;允许客户端以编程方式构建...该 JEP 提议“增强 Java 虚拟机加载 Java 应用程序和编译成本机代码库的能力,以实现更快的启动和基线执行”。...有关该版本的更多详细信息,请参阅发布说明。 Quarkus 红帽(Red Hat)发布了 Quarkus 3.2.2.Final 版本,以解决 3.2.1 版本中的两个回归问题以及文档方面的改进。...值得注意的变更包括:恢复到了openjdk-17-runtime:1.16镜像,因为开发分支的版本号已升至 1.17,预计下一个版本将于 2023 年 8 月发布;删除了有关quarkus.launch.rebuild

    19330
    领券