window java 内存设置_windows下配置tomcat服务器的jvm内存大小的两种方式

本文介绍了如何处理Java堆内存溢出问题,详细解析了'GC Overhead Limit Exceeded'错误,并提供了Windows环境下调整Tomcat服务器JVM内存的两种方法:直接修改catalina.bat文件和通过tomcatw.exe设置服务参数。通过增加内存分配,成功降低了内存使用率,从而优化了JVM性能。
摘要由CSDN通过智能技术生成

难得遇到一次java堆内存溢出(心里想着,终于可以来一次jvm性能优化了$$)

先看下报错信息,

java.lang.OutOfMemoryError: GC overhead limit exceeded

错误就是发出了这样的信号: 执行垃圾收集的时间比例太大, 有效的运算量太小. 默认情况下, 如果GC花费的时间超过 98%, 并且GC回收的内存少于 2%, JVM就会抛出这个错误。

造成这个问题的原因可能是项目里某个地方定义的太多的map,list对象,或者一次从数据库中查询的数据量过大。

查看tomcat服务启动信息,默认tomcat的内存分配大小是初始化128,最大值为256MB

a6ded0cb6d889839f6f2520f925dd8d3.png

根据网上教程,在tomcat\bin\catalina.bat文件

rem----- Execute The Requested Command ---------------------------------------

echo Using CATALINA_BASE: "%CATALINA_BASE%"

echo Using CATALINA_HOME: "%CATALINA_HOME%"

echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"

在Execute The Request Command注释下面添加参数,设置jvm内存最大值

set "JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx512m"

配置完之后再次查看启动日志tomcat/logs/catalina.2019-07-08.log

发现日志里显示,jvm参数还是128 - 256 没变化

继续查询资料,我们修改的catalina.bat配置文件对以服务方式启动的tomcat无效果Tomcat内存设置详解

6.0以上的tomcat需要在tomcatw.exe文件中设置参数,比如我的tomcat9w.exe

79c02c599e3b374653748670c88766e0.png

用这个方法的前提是我们的服务名称必须是tomcat9,否则这个tomcat9w.exe运行会报错,服务tomcat9未安装

安装tomcat服务的方法:在tomcat/bin目录下,运行命令 service.bat install

Usage: service.bat install/remove [service_name] [/user username]

服务安装完后,设置如上图的配置,启动服务后,内存修改完成。

看下监控的截图(这张图原本的jvm内存最大为256MB时,内存使用率为89%),修改内存为512MB之后就好很多了

c7d68415f9c470f7ca46f8d3b0be698d.png

通过以上内存的配置,可以总结windows下修改tomcat服务器jvm内存的两种方法:一种,直接修改catalina.bat文件,修改完后可以通过startup.bat方式启动直接生效

另一种就是作为windows服务后台运行方式启动,这个需要修改tomcatw.exe的启动参数(不知道是不是动态参数修改,猜测不是)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tomcat服务器通常使用JVM (Java Virtual Machine) 来运行,内存配置对于它的性能至关重要。主要有以下几个方面的设置: 1. **JVM内存**(Heap Memory):这是Java应用的主要内存区域,用于存放对象实例。通过`-Xms`和`-Xmx`命令行参数设置初始堆大小(最小值)和最大堆大小(最大值)。例如:`-Xms512m -Xmx1024m`,分别表示初始512MB和最大1GB。 2. **非堆内存**(Non-heap Memory):包括常量池、元数据区和线程上下文类加载器等。这部分内存不会自动调整,需要手动配置,如`-XX:PermSize`(永久代大小)和`-XX:MaxPermSize`。 3. **年轻代**(Young Generation):包括Eden空间、Survivor Space和Tenured Generation,主要用于对象的创建和回收。可以设置为固定大小或分段,如`-XX:NewRatio`用于eden/survivor的比例。 4. **老年代**(Old Generation):长期存活的对象会被移入这里,设置`-XX:MetaspaceSize`限制元数据区域大小,避免溢出。 5. **持久化缓存**(如果启用了持久连接):Tomcat会分配额外的内存用于存储连接信息,这可以通过`org.apache.tomcat.util.http.fileupload.FileUploadSupport.MAX_FILE_SIZE`控制。 6. **JVM内存溢出监控**:可以启用JVM的堆转储日志(`-XX:+HeapDumpOnOutOfMemoryError`),以便在发生内存溢出时生成堆转储文件供分析。 为了保证稳定性和性能,建议根据实际应用需求和资源情况,通过监控工具(如VisualVM、JConsole等)动态调整这些配置。记得定期检查日志以诊断潜在的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值