Tomcat设置项目内存的相关问题 (Service服务和startup命令行启动方式)

8 篇文章 0 订阅
2 篇文章 0 订阅

设置的方法在下文~

问题背景

近日,负责的项目在正式环境内,对大数据量导出为Excel进行操作时,表现得异常卡顿,经常出现500连接超时、内存溢出等异常。

最初技术组认为是代码需要进行优化,将原本的导出代码copy了一份后,修改为达到限制的导出上限就分为另一个Excel,最后以ZIP压缩包的形式进行导出。

再半天的编码后,晚上发布至正式环境的测试系统进行测试时,发现问题依旧!瞬间wtf...

解决方案

最后在修改Tomcat的环境内存,解决了相关的问题。

在查询资料和系统测试的过程中找到了一些有趣的内容:

Tomcat 内存,最小堆大小为物理内存的1/16,最大堆大小为物理内存的1/4.......

client模式下,JVM初始和最大堆大小为:
在物理内存达到192MB之前,JVM最大堆大小为物理内存的一半,否则,在物理内存大于192MB,在到达1GB之前,JVM最大堆大小为物理内存的1/4,大于1GB的物理内存也按1GB计算,举个例子,如果你的电脑内存是128MB,那么最大堆大小就是64MB,如果你的物理内存大于或等于1GB,那么最大堆大小为256MB。
Java初始堆大小是物理内存的1/64,但最小是8MB。

server模式下:
与client模式类似,区别就是默认值可以更大,比如在32位JVM下,如果物理内存在4G或更高,最大堆大小可以提升至1GB,,如果是在64位JVM下,如果物理内存在128GB或更高,最大堆大小可以提升至32GB。

—— https://segmentfault.com/q/1010000007235579?_ea=1280245

Tomcat的Xms内存与Xmx内存建议设置为相同的数值,避免造成瞬间GC

GC,即异常 java.lang.OutOfMemoryError: GC overhead limit exceeded

Exception in thread thread_name: java.lang.OutOfMemoryError: GC Overhead limit exceeded
Cause: The detail message "GC overhead limit exceeded" indicates that the garbage collector is running all the time and Java program is making very slow progress. After a garbage collection, if the Java process is spending more than approximately 98% of its time doing garbage collection and if it is recovering less than 2% of the heap and has been doing so far the last 5 (compile time constant) consecutive garbage collections, then a java.lang.OutOfMemoryError is thrown. This exception is typically thrown because the amount of live data barely fits into the Java heap having little free space for new allocations.
Action: Increase the heap size. The java.lang.OutOfMemoryError exception for GC Overhead limit exceeded can be turned off with the command line flag -XX:-UseGCOverheadLimit.

大致意思是,JVM花费了98%的时间进行垃圾回收,但是只从系统得到2%可用的内存,频繁的进行内存回收,期间最起码已经进行了5次连续的垃圾回收,JVM就会曝出ava.lang.OutOfMemoryError: GC overhead limit exceeded的异常。

Tomcat配置成Windows Service服务后,内存的配置并非是常规命令行在catalina.bat内配置的内存,涨姿势了……

Tomcat 设置内存

startup命令行启动方式

打开在Tomcat的bin文件夹下的catalina.bat(linux系统为catalina.sh),输入下方的设置信息:

JAVA_OPTS=-Xms[初始化内存大小] -Xmx[可以使用的最大内存]

例如JAVA_OPTS=-Xms4069 -Xmx4069,注意事项:

  1. -Xms、-Xmx后直接跟数字,不需要空格。
  2. =后面不需要任何英文引号('),之前组里的小伙子在查找csdn博客内的教程时加上了英文引号(')导致配置没有正确执行...
  3. 在catalina.bat(或.sh文件)可直接写在开头@echo off之后。

设置完毕后重启Tomcat即可。

 

Windows Service 系统服务的启动方式

首先,我们需要在cmd.exe内切换到Tomcat的bin文件夹,之后执行下方命令创建服务

service.bat install 服务名

OK,很多人(包括一脸懵的我)在创建后就认为万事大吉,殊不知Service内存的配置与上一个方法不共享。

这时候,我们打开regedit注册表工具,按下方的路径找到配置“JvmMs”和“JvmMx”

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\[你创建的服务名]\Parameters\Java

分别双击这两个配置,对内存值进行修改。(PS:这里建议点击decimal十进制的方式进行录入)

都设置ok之后,在services.msc服务窗口内重启项目即可!

 

以上内容就是Tomcat设置内存的两种方法了,谢谢你的浏览!🌹

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值