项目调优

作为一名工程师,项目调优这事,是必须得熟练掌握的事情。

在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。

一、修改配置文件

关于修改配置文件application.properties。

SpringBoot项目详细的配置文件修改文档:

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#common-application-properties

其中比较重要的有:


二、Jvm调优

关于Jvm调优Oracle官网有一份指导说明:

https://docs.oracle.com/middleware/11119/wls/PERFM/jvm_tuning.htm#i1146060

有兴趣大家可以去看看。

三、Jvm调优实战

1、未设置JVM参数的情况

我现在有一个项目,默认情况下,没有设置任何Jvm参数。

下面我来启动看一下。

看一下堆栈分配:

很明显默认的最大堆内存分配了8个G。很明显的不合理嘛。

2、下面我们来设置下Jvm参数

例如要配置JVM这么一大段参数:


方式一:

如果你用的是IDEA等开发工具,来启动运行项目,那么要调试JDK就方便太多了。

只需要将参数值设置到VM options中即可。

设置成功,我的GC日志和堆栈分配都已经OK了。

GC日志:

堆栈分配:

方式二:

适用于在项目部署后,在启动的时候,采用脚本或者命令行运行的时候设置。

先在项目路径下,给项目打包:

清理就旧项目


打包新项目:


打包完成后进入可运行Jar包的路径下:

执行启动设置Jvm参数的操作。

这个时候,你再看监控,你就会发现,已经是Ok的了。

堆栈都是按照启动时候,设置的Jvm参数启动的。

关于这些设置的JVM参数是什么意思,请参考第二步中的oracle官方给出的调优文档。
我在这边简单说一下:
-XX:MetaspaceSize=128m (元空间默认大小)
-XX:MaxMetaspaceSize=128m (元空间最大大小)
-Xmx1024m (堆最大大小)
-Xms1024m (堆默认大小)
-Xmn256m (新生代大小)
-Xss256k (棧最大深度大小)
-XX:SurvivorRatio=8 (新生代分区比例 8:2)
-XX:+UseConcMarkSweepGC (指定使用的垃圾收集器,这里使用CMS收集器)
-XX:+PrintGCDetails (打印详细的GC日志)
知识点:
JDK8之后把-XX:PermSize 和 -XX:MaxPermGen移除了,取而代之的是
-XX:MetaspaceSize=128m (元空间默认大小)
-XX:MaxMetaspaceSize=128m (元空间最大大小)
JDK 8开始把类的元数据放到本地化的堆内存(native heap)中,这一块区域就叫Metaspace,中文名叫元空间。
使用本地化的内存有什么好处呢?最直接的表现就是java.lang.OutOfMemoryError: PermGen 空间问题将不复存在,因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上Metaspace就可以有多大(貌似容量还与操作系统的虚拟内存有关?这里不太清楚),这解决了空间不足的问题。
不过,让Metaspace变得无限大显然是不现实的,因此我们也要限制Metaspace的大小:使用-XX:MaxMetaspaceSize参数来指定Metaspace区域的大小。JVM默认在运行时根据需要动态地设置MaxMetaspaceSize的大小。
好啦,祝大家学习和工作顺利啦!

作者:星朝

来源:www.cnblogs.com/jpfss/p/9753215.html

- END -

推荐阅读:

1、

2、

3、

4、

5、

关注Java技术栈公众号在后台回复:Java,可获取一份栈长整理的最新Java 技术干货。

点击「阅读原文」和栈长学更多~

Spring Boot 深度调优,6得飞起~的更多相关文章

  1. 3个Spring Boot项目调优的方式

    前言 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行.   一.修改配置文件 关于修改配置文件applicati ...

  2. JVM原理以及深度调优(二)

    JVM内存分配 内存分配其实真正来讲是有三种的.但对于JVM来说只有两种 栈内存分配: 大家在调优的过程中会发现有个参数是-Xss 默认是1m,这个内存是栈内存分配, 在工作中会发现栈OutOfMem ...

  3. JVM原理与深度调优(一)

    什么是jvm jvm是java虚拟机 运行在用户态.通过应用程序实现java代码跨平台.与平台无关.实际上是"一次编译,到处执行" 1.从微观来说编译出来的是字节码!去到哪个平台都 ...

  4. JVM原理与深度调优

    什么是jvm jvm是java虚拟机 运行在用户态.通过应用程序实现java代码跨平台.与平台无关.实际上是"一次编译,到处执行" 1.从微观来说编译出来的是字节码!去到哪个平台都 ...

  5. Spring Zuul 性能调优,如何提升平均响应时间200% ?

    最近负责公司的 Gateway 项目,我们用 Spring Zuul 来做 HTTP 转发,但是发现请求多的时候,AWS 的健康检查就失败了,但是实际上程序还在跑,在日志上也没有任何东西错误打印出来出 ...

  6. JVM原理与深度调优(三)

    jvm垃圾收集算法 1.引用计数算法每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收.此方法简单,无法解决对象相互循环引用的问题.还有一个问题是如何解决精准计 ...

  7. Github 上 Star 最多的个人 Spring Boot 开源学习项目

    2016年,在一次技术调研的过程中认识到了 Spring Boot ,试用之后便一发不可收拾的爱上它.为了防止学习之后忘记,就在网上连载了 Spring Boot 系列文章,没想到这一开始便与 Spr ...

  8. 【ELK】5.spring boot日志集成ELK,搭建日志系统

    阅读前必看: ELK在docker下搭建步骤 spring boot集成es,CRUD操作完整版 ============================================== 本章集成 ...

  9. Spring Boot 为什么这么火?(二)

    Spring Boot 的火 网上连载了 Spring Boot 系列文章,没想到这一开始便与 Spring Boot 深度结缘. 技术社区 Spring Boot 的文章越来越多:Spring Bo ...

随机推荐

  1. SpringBoot配置文件优先级加载顺序

  2. net core 下 接受文件 测试

    /* IFormFileCollection Files 再Request对象下的From对象下的Files对象 public interface IFormFileCollection : IRea ...

  3. POJ 2182 Lost Cows (树状数组 && 二分查找)

    题意:给出数n, 代表有多少头牛, 这些牛的编号为1~n, 再给出含有n-1个数的序列, 每个序列的数 ai 代表前面还有多少头比 ai 编号要小的牛, 叫你根据上述信息还原出原始的牛的编号序列 分析 ...

  4. hihoCoder #1558 : H国的身份证号码I

    题目链接:https://hihocoder.com/problemset/problem/1558 H国的身份证号码I 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 ...

  5. springboot(二).springboot整合logback用于日志输出

    springboot整合logback用于日志输出 我们项目的基本框架已经完成,http请求已经可以访问,现在给我们的框架添加日志记录的功能并能将每天的记录记录到文件中去 在这里,我们使用logbac ...

  6. [CSP-S模拟测试]:maze(二分答案+最短路)

    题目传送门(内部题88) 输入格式 第一行两个数$n,m$.第二行四个数$sx,sy,tx,ty$.分别表示起点所在行数.列数,终点所在行数.列数.接下来$n$行,每行$m$个数,描述迷宫.最后一行一 ...

  7. 火狐firefox进行post提交测试

    1,打开火狐浏览器,将测试url复制到地址栏.按F12,进行连接. 2,点击连接:再点击“编辑与重发” 3,请求头中加入如下一行: Content-Type: application/json; ch ...

  8. postgres 数据导入导出

    # 导出表结构 pg_dump  -U postgres -s helloworld > hello.sql  # 导出表数据 pg_dump  -U postgres helloworld & ...

  9. 方法二破解:Excel工作表保护密码

    最简单,复制整表,粘贴在全新的表中.但是有时候会丢失一些元素 在excel2016中实测验证过有效 第1步:在工作表菜单栏上添加[开发工具].方法是:依次单击[文件]--->[选项]---> ...

  10. leetcode 234 回文链表 Palindrome Linked List

    要求用O(n)时间,和O(1)空间,因此思路是用本身链表进行判断,既然考虑回文,本方法思想是先遍历一次求链表长度,然后翻转前半部分链表:然后同时对前半部分链表和后半部分链表遍历,来判断对应节点的值是否 ...