首页 > 其他分享 >spring boot graalvm native 试用

spring boot graalvm native 试用

时间:2023-06-25 23:44:37浏览次数:44  
标签:spring boot gc org native graalvm

核心是体验下新版本支持情况同时体验下企业特性(g1 gc)

参考示例

就是基于spring start 提供的web,添加了graalvm native 构建支持,graalvm oracle 发行版直接可以官方下载

  • pom.xml 核心信息
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.1.1</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.dalong</groupId>
  <artifactId>graalvmappdemo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>graalvmappdemo</name>
  <description>demo app</description>
  <properties>
    <java.version>17</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
 
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
 
  <build>
    <plugins>
      <plugin>
        <groupId>org.graalvm.buildtools</groupId>
        <artifactId>native-maven-plugin</artifactId>
        <configuration>
            <buildArgs>
            <buildArg>--enable-monitoring=jfr,jmxserver,jvmstat</buildArg> // 开启了jfr 以及一些监控
            <buildArg>--gc=G1</buildArg> // 使用g1 gc 
          </buildArgs>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
 
</project>
  • 构建
    注意需要一些依赖,比如zlib 以及libstdc++-static 同时因为使用g1 gc 对于gcc 要求有点高,推荐通过centos-release-scl 构建
 
yum -y install centos-release-scl
yum install  -y devtoolset-7-gcc*
scl enable devtoolset-7 bash
mvn clean -Dmaven.test.skip package -Pnative native:build

启动&效果

  • 启动
./graalvmappdemo -XX:StartFlightRecording="filename=spring-boot.jfr" -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote=true -Djava.rmi.server.hostname=xxxxx  -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9996 -Dcom.sun.management.jmxremote.ssl=false

 

  • jmx

 

  • jfr

 

说明

默认graalvm native-image 使用的是串行gc,对于高负载场景g1 gc 会比较好,以前此功能是需要企业版的,但是最近的license 许可调整,我们可以直接使用了

参考资料

https://www.graalvm.org/latest/reference-manual/native-image/guides/optimize-native-executable-with-pgo/
https://docs.spring.io/spring-boot/docs/3.0.0/reference/htmlsingle/#native-image

标签:spring,boot,gc,org,native,graalvm
From: https://www.cnblogs.com/rongfengliang/p/17504280.html

相关文章

  • 【SpringCloud】Hystrix
    目录1.前言1.1什么是服务雪崩?1.2怎么解决服务雪崩2.Hystrix快速入门2.1Hystrix+OpenFeign2.1.1服务提供者2.1.2服务消费者2.1.3测试2.2Hystrix+Ribbon3.Hystrix的常用配置......
  • spring里的@ImportResource注解介绍
    @ImportResource注解是Spring框架中的一个注解,它用于导入外部的XML配置文件。通过@ImportResource注解,可以将外部的XML配置文件加载到Spring的应用上下文中,从而使得这些配置文件中定义的Bean能够被Spring容器管理。使用@ImportResource注解的步骤如下:在需要使......
  • springboot+vue基于Web的社区医院管理服务系统,附源码+数据库+论文+PPT,适合课程设计、
    1、项目介绍在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括社区医院管理服务系统的网络应用,在外国线上管理系统已经是很普遍的方式,不过国内的管理系统可能还处于起步阶段。社区医院管理服务系统具有社区医院信息管理功能的选择。社区医院管理服务系统......
  • 死信 与 死信交换机【Spring Cloud - 服务异步通信】
    什么是死信?当一个队列中的消息满足下列情况之一时,可以称为死信(deadletter):- 消费者使用basic.reject或basic.nack声明消费失败,并且消息的requeue参数设置为false- 消息是一个过期消息,超时无人消费- 要投递的队列消息慢了,无法投递 什么是死信交换......
  • springboot中自定义JavaBean返回的json对象属性名称大写变小写问题
    目录一、继承类二、手动添加Get方法三、@JsonProperty四、spring-bootjson(jackson)属性命名策略开发过程中发现查询返回的数据出现自定义的JavaBean的属性值大小写格式出现问题,导致前端无法接受到数据,目前有四种解决方法,根据大佬的经验之谈,前两种是最简单便捷的,后两种是比较通......
  • SpringBoot + Ant Design Vue实现数据导出功能
    (SpringBoot+AntDesignVue实现数据导出功能)一、需求以xlsx格式导出所选表格中的内容要求进行分级设置表头颜色。二、前端代码实现2.1显示实现首先我们需要添加一个用于到导出的按钮上去,像这样的:<a-button@click="exportBatchlistVerify">批量导出</a-button>至......
  • GRUB(GNU GRand Unified Bootloader)是一个常用的引导加载程序,用于在计算机启动时加载操
    GRUB(GNUGRandUnifiedBootloader)是一个常用的引导加载程序,用于在计算机启动时加载操作系统。它是开源软件,由GNU项目开发并得到广泛应用。GRUB主要有两个版本:GRUBLegacy和GRUB2。GRUB2是较新的版本,也是目前更常用和推荐的版本。下面主要介绍GRUB2的特点和功能:多操作系统支......
  • Spring三级缓存与循环依赖
    三级缓存//一级缓存,存放的是完整的beanprivatefinalMap<String,Object>singletonObjects=newConcurrentHashMap<>(256);//二级缓存,存放的是半成品的bean,未完成属性注入privatefinalMap<String,Object>earlySingletonObjects=newHashMap<>(16);//三级缓存,存放的......
  • spring初学
    spring是一个轻量级的java开发框架,基础是springframework,依靠springframework可以发展出很多适用于不同场合的模式  ......
  • springboot加切面日志
    packageorg.rest.util;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionP......