记一次jvm参数调优

随着开发的持续进行,开发的系统也逐渐变大。程序是部署在tomcat下的,tomcat的启动和请求的响应也越来越慢。

tomcat的启动时间:
tomcat的启动时间很长
请求响应时间:
在这里插入图片描述

由于在自己的电脑上并没有这种情况,而公司部署的服务器是比较老的电脑,所以我以为是电脑年代久远,性能低导致问题的出现。然而事情并没有那么简单。

在请求数据量较大的接口时,又出现别的问题。
在这里插入图片描述
问题比较明显,百度一搜就知道原因:
在这里插入图片描述
于是在tomcat目录下/bin/catalina.bat以下添加以下配置:

set JAVA_OPTS= -Xms4096m -Xmx4096m

当时想着这个内存越大越好嘛(-Xms、-Xmx大小建议相同),于是分配了4g,可是配置了这么多内存后,tomcat根本启动不了,报了以下错误:
在这里插入图片描述
这个错误大概就是说:指定的大小超过了最大可表示大小。
百度以后发现是以下原因:
在这里插入图片描述
于是老老实实把内存改为1g,成功启动后,发现tomcat的启动和请求的响应慢的问题并没有解决。于是我想是不是参数并没有生效。于是又又又去百度。发现有一款JDK自带的JVM工具–jvisualvm。在cmd命令行中输入jvisulavm便可以使用。
在这里插入图片描述
找到对应tomcat的jvm参数如下,发现并没有找到-Xms、-Xmx参数配置。
在这里插入图片描述
于是只好再次打开tomcat目录下/bin/catalina.bat文件查看。发现我的配置如下:

set JAVA_OPTS=-Xms1024m -Xmx1024m
set JAVA_OPTS=-Dspring.profiles.active=dev

很明显,第二项的配置覆盖了第一项的配置,导致-Xms、-Xmx参数没有生效。于是再次修改配置文件如下,然后再次启动tomcat。

set JAVA_OPTS=-Dspring.profiles.active=dev -Xms1024m -Xmx1024m

tomcat启动的时间明显变快了,如下:
在这里插入图片描述
配置也生效了,如下:
在这里插入图片描述
至此,问题已经解决,由于是第一次遇到,中间出了很多问题,磕磕绊绊的,但最后还是解决了。

最后还要一个问题,为什么我用idea启动项目并没有出现内存溢出的问题,而用tomcat单独部署是却出了问题?
再次打开jvisualvm中idea的jvm参数,有种似曾相识的感觉。
在这里插入图片描述
原来以前解决idea控制台打印中文乱码的时候,在idea安装目录/bin文件夹下,有这么两个文件。
在这里插入图片描述
打开对应我们电脑64位的文件,发现一个jvm参数,一个是解决乱码的参数。正是因为idea默认配置了相对较大的参数,所以才没出现内存溢出的问题。
在这里插入图片描述

参考文章:
1、jvm内存溢出的三种情况以及解决办法
2、JVM的XMS和XMX参数设置为相同值有什么好处?
3、JVM调优总结 -Xms -Xmx -Xmn -Xss
4、jvisualvm 工具使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JVM参数调优是为了提高Java应用程序的性能和稳定性。下面是一些常见的JVM参数调优的思路和建议: 1. 堆内存设置: - -Xms: 初始堆大小,建议与-Xmx相同,避免堆大小的动态调整。 - -Xmx: 最大堆大小,根据应用程序的需求进行设置,避免频繁的垃圾回收。 2. 垃圾回收器选择: - -XX:+UseParallelGC: 使用并行垃圾回收器,适合多核CPU和高吞吐量应用。 - -XX:+UseConcMarkSweepGC: 使用CMS垃圾回收器,适合响应时间优先的应用。 - -XX:+UseG1GC: 使用G1垃圾回收器,适合大内存应用和低延迟要求。 3. 垃圾回收参数调优: - -XX:NewRatio: 设置新生代和老年代的比例,默认为2,可以根据应用程序的对象生命周期进行调整。 - -XX:SurvivorRatio: 设置Eden区和Survivor区的比例,默认为8,可以根据对象的存活率进行调整。 - -XX:MaxTenuringThreshold: 设置对象进入老年代的年龄阈值,默认为15,可以根据对象的存活率和内存情况进行调整。 4. 线程相关参数: - -Xss: 设置线程栈的大小,默认为1M,可以根据应用程序的线程数量进行调整。 - -XX:ParallelGCThreads: 并行垃圾回收的线程数量,默认为CPU核心数的1/8,可以根据CPU和内存情况进行调整。 5. 其他常用参数: - -XX:+UseCompressedOops: 使用压缩指针,可以减少对象引用的内存消耗。 - -XX:+DisableExplicitGC: 禁用显示调用System.gc()方法,避免不必要的垃圾回收。 以上是一些常见的JVM参数调优策略,具体的调优效果和最佳参数设置还需要根据应用程序的实际情况进行测试和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值