美文网首页Spring Bootjava容器优化java所有基础知识
进阶Spring Boot---扫包优化及JVM参数调优

进阶Spring Boot---扫包优化及JVM参数调优

作者: 翼云先森 | 来源:发表于2018-10-17 22:41 被阅读449次

    一,Spring Boot 扫包优化

    @SpringBootApplication注解自动获取应用的配置信息,会给应用带来一些副作用。由自动配置( auto-configuration )和 组件扫描 ( component scanning )组成,这跟使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解的作用是一样的。这样做给开发带来方便的同时,也会有三方面的影响:

    1、会导致项目启动时间变长。当启动一个大的应用程序,或将做大量的集成测试启动应用程序时,影响会特别明显。

    2、会加载一些不需要的多余的实例(beans)。

    3、会增加 CPU 消耗。

    针对以上三个情况,我们可以移除 @SpringBootApplication 然后使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan注解来扫描特定的包

    //@SpringBootApplication
    @Configuration
    @EnableAutoConfiguration
    @ComponentScan(basePackages = {"com.crisp.controller","com.crisp.service"})
    @MapperScan("com.crisp.mapper")
    public class Mybatis05Application {
    
       public static void main(String[] args) {
          SpringApplication.run(Mybatis05Application.class, args);
       }
    }
    

    二,JVM参数调优

    调优策略:初始化堆内存与最大堆相同,减少垃圾回收次数

    两种方法:内部启动和外部启动

    1.内部启动

    实例参数-XX:+PrintGCDetails -Xmx32M -Xms1M

    打印GC日志,设置最大堆内存32M,初始堆内存1M

    -Xms :设置Java堆栈的初始化大小

    -Xmx :设置最大的java堆大小

    测试:

    第一步,在项目运行,编辑结构中配置参数

    image.png
    image.png

    第二步,运行项目,查看回收次数


    image.png

    这样配置后,GC回收次数非常多。

    更改堆大小后,-XX:+PrintGCDetails -Xmx256M -Xms256M ,GC回收次数减少


    image.png
    1. 外部启动

    第一步,通过maven 项目打jar包

    配置pom.xml

    <build>
       <plugins>
          <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-compiler-plugin</artifactId>
             <configuration>
                <source>1.8</source>
                <target>1.8</target>
             </configuration>
          </plugin>
          <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-jar-plugin</artifactId>
             <configuration>
                <archive>
                   <manifest>
                      <addClasspath>true</addClasspath>
                      <useUniqueVersions>false</useUniqueVersions>
                      <classpathPrefix>lib/</classpathPrefix>
                      <mainClass>com.crisp.Mybatis05Application</mainClass>
                   </manifest>
                </archive>
             </configuration>
          </plugin>
          <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-surefire-plugin</artifactId>
             <version>2.4.2</version>
             <configuration>
                <skipTests>true</skipTests>
             </configuration>
          </plugin>
          <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
       </plugins>
    </build>
    

    mainClass 为入口类

    第二步,在Maven Project目录下,点击package

    image.png

    生成jar默认在target 文件夹下

    image.png

    第三步,执行外部启动命令

    java -server -Xms32m -Xmx32m -jar mybatis05-0.0.1-SNAPSHOT.jar

    image.png

    第四步,通过jconsole.exe 查看内存

    image.png image.png
    image.png
    image.png

    可以看到内存走向,有一个拐点,说明GC在做回收。

    相关文章

      网友评论

        本文标题:进阶Spring Boot---扫包优化及JVM参数调优

        本文链接:https://www.haomeiwen.com/subject/pjydzftx.html