今日推荐Spring新版本抛弃JVM,可独立部署,网友:要自立门户???国内大神成功给手机装上了 Win11,代码已开源!Fluent Mybatis 牛逼!Nginx 常用配置清单这玩意比ThreadLocal叼多了,吓得我赶紧分享出来。

来源:blog.csdn.net/wd2014610/article/details/82182617

项目调优

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

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

一、修改配置文件

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

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

其中比较重要的有:

server.tomcat.max-connections=0 # Maximum number of connections that the server accepts and processes at any given time.
server.tomcat.max-http-header-size=0 # Maximum size, in bytes, of the HTTP message header.
server.tomcat.max-http-post-size=0 # Maximum size, in bytes, of the HTTP post content.
server.tomcat.max-threads=0 # Maximum number of worker threads.
server.tomcat.min-spare-threads=0 # Minimum number of worker threads.

二、Jvm调优

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

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

三、Jvm调优实战

1、未设置JVM参数的情况

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

下面我来启动看一下。

看一下堆栈分配:

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

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

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

-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC

方式一:

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

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

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

GC日志:

堆栈分配:

方式二:

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

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

清理就项目

mvn clean

打包新项目:

 mvn package -Dmaven.test.skip=true

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

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

$ java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC newframe-1.0.0.jar

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

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

关于这些设置的JVM参数是什么意思,请参考第二步中的oracle官方给出的调优文档。

我在这边简单说一下:

-XX:MetaspaceSize=128m (元空间默认大小)
-XX:MaxMetaspaceSize=128m (元空间最大大小)
-Xms1024m (堆最大大小)
-Xmx1024m (堆默认大小)
-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的大小。

好啦,祝大家学习和工作顺利啦!

Java网站推荐:www.java1000.com,网站包括Java基础、进阶、源码、面试等各个系列文章,欢迎浏览!
Github仓库推荐:
https://github.com/OUYANGSIHAI/JavaInterview,复制链接直达,该仓库是本人面试一年的面试记录与分享,相信对你有一定的帮助!
推荐文章
1、14个项目!2、GitHub 上 6 款牛哄哄的后台模板3、推荐几个前后端分离项目!4、一个Github项目搞定微信、QQ、支付宝等第三方登录5、一款基于 Spring Boot 的现代化社区(论坛/问答/社交网络/博客)
更多项目源码1、30多个Java实战项目,全部在这里了。

SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)相关推荐

  1. SpringBoot项目优化和Jvm调优(亲测,真实有效)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:星朝 原文:cnblogs.com/jpfss/p/9753 ...

  2. SpringBoot项目优化和Jvm调优及VisualVM远程连接监控JVM(JMX连接)

    项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 在这边有一篇比较好的文章,推荐给大家! Spring ...

  3. 后端技术:Spring Boot 项目优化和 JVM 调优,真实有效。

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

  4. java项目processes设置,Jvm调优和SpringBoot项目优化的详细教程

    参考文章 1.先看一下未设置JVM参数的情况,默认情况下,没有设置任何Jvm参数. 2.设置Jvm参数. 配置参数: 关于这些设置的JVM参数是什么意思,参考Jvm调优. -XX:MetaspaceS ...

  5. springboot不会运行gc_SpringBoot项目深度优化和Jvm调优

    点击上方"Java学习之道",选择"关注"公众号 每天上班,干货准时送达! 本文作者:星朝 本文来源:www.cnblogs.com/jpfss/p/97532 ...

  6. SpringBoot 项目构建 Docker 镜像调优实践

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:超级小豆丁 http://www.mydlq.club/article/16/ PS ...

  7. python 性能优化监控工具_推荐一款非常实用的JVM性能调优监控工具(亲测好用)...

    前言 现实企业级Java开发中,有时候我们会碰到下面这些问题: 1.OutOfMemoryError,内存不足 2.内存泄露 3.线程死锁 4.锁争用(Lock Contention) 5.Java进 ...

  8. 全网最全最新安装nodes方式,楼主亲测好用

    1.准备工作 1.确认环境 swapoff -a //关闭swap setenforce 0 //临时关闭selinux 复制代码 每台机器的以下内容不能相同 sudo cat /sys/class/ ...

  9. 五分钟带你玩转docker(三)全网最新最简单docker安装方式,楼主亲测

    1.安装docker (1)卸载以前安装的Docker容器 sudo yum remove docker \ docker-client \ docker-client-latest \docker- ...

最新文章

  1. 机器学习-数据科学库(第四天)
  2. Linux的hostname修改详解
  3. 创建订单 - 填充新订单数据
  4. 上传文件大小限制,webconfig和IIS配置大文件上传
  5. 优朋普乐大数据_优朋普乐邵以丁:用大数据全面洞察需求
  6. go redis 序列化_求求你不要手写Redis缓存
  7. Minecraft InputFix
  8. FlashDevelop专用swc导出插件
  9. 算法 —— 实用程序片段
  10. MATLAB实现频数直方图——hist的使用
  11. Windows下使用nas服务器——映射网络驱动器
  12. ps抠图神器:Topaz ReMask 5 for Mac
  13. Solidworks如何打开swb文件
  14. android 小米手机播放短小音频无声音问题
  15. SWFObject 使用 范例版~~~
  16. 权力的游戏击杀和家族知识图谱(python+neo4j)
  17. 【数据结构】算法的渐进分析-渐进时间复杂度
  18. 案例分析警示安全隐患:免费WiFi购物卷走账户余额
  19. 玩彩票赢钱概率有多少?用Python来告诉你
  20. 关联数据赋能智能化业务

热门文章

  1. 人参的用法 和 吃法
  2. MFC中进度条控件的使用方法
  3. 关于STM32中CAN1_RX0_IRQn和CAN1_RX1_IRQn的使用
  4. BLE-NRF51822教程10—动态密码(配对码)
  5. stm8s开发(八) IIC的使用:IIC主机通信!
  6. (数据挖掘 —— 无监督学习(聚类)
  7. 深度学习概览之自然语言处理:从基本概念到前沿研究
  8. 论文《Attention Is All You Need》及Transformer模型
  9. [ARM-assembly]-ARMV9-A64指令汇总-指令速查
  10. android指纹fingerprint学习总结