Can't change tomcat 7 heap size

2019-01-21 20:51发布

问题:

I have set the heap size of tomcat 7 by adding the following line in catalina.sh

export CATALINA_OPTS="-Xms512m -Xmx1024m"

then stopped and started the tomcat. but when tried to get the heap size using the command jmap -heap , i can notice that the memory doesn't change:

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 526385152 (502.0MB)
   NewSize          = 1048576 (1.0MB)
   MaxNewSize       = 4294901760 (4095.9375MB)
   OldSize          = 4194304 (4.0MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 16777216 (16.0MB)
   MaxPermSize      = 67108864 (64.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 99352576 (94.75MB)
   used     = 9643144 (9.196418762207031MB)
   free     = 89709432 (85.55358123779297MB)
   9.705982862487632% used
From Space:
   capacity = 4063232 (3.875MB)
   used     = 0 (0.0MB)
   free     = 4063232 (3.875MB)
   0.0% used
To Space:
   capacity = 5177344 (4.9375MB)
   used     = 0 (0.0MB)
   free     = 5177344 (4.9375MB)
   0.0% used
PS Old Generation
   capacity = 37748736 (36.0MB)
   used     = 21889008 (20.874984741210938MB)
   free     = 15859728 (15.125015258789062MB)
   57.98606872558594% used
PS Perm Generation
   capacity = 60948480 (58.125MB)
   used     = 31496008 (30.03693389892578MB)
   free     = 29452472 (28.08806610107422MB)
   51.67644541750672% used

please advise.

回答1:

Set additionally export JAVA_OPTS="-Dcom.sun.management.jmxremote" and use JConsole to inspect the tomcats memory consumption.



回答2:

sudo vi /etc/default/tomcat7

Find the line that begins JAVA_OPTS="-Djava.awt.headless=true

and change the piddly -Xmx128m to -Xms512m -Xmx1024m

If you have more than one core...-XX:+UseConcMarkSweepGC is probably what you want.



回答3:

Do not change catalina.sh!! This file is not supposed to be changed by user. Tomcat updates may override it. Instead create a file called "setenv.sh" in your "$CATALINA_BASE/bin" (same folder as catalina.sh). Set all your environment variables there.

setenv.sh is an optional file. If it exists it gets imported by catalina.sh. And the name suggests what you put there. This is a proper place to initialize your $CATALINA_OPTS, $JAVA_OPTS, etc.

P.S. Generally speaking you should avoid tweaking files that can can change with package/distribution update provided and alternative configuration approach exists. In this case files like catalina.sh, /etc/tomcat7/tomcat7.conf, /etc/init.d/tomcatX etc can be updated silently and you won't even notice that your configuration changes are rolled back.



回答4:

how about editing etc/default/tomcat7

# You may pass JVM startup parameters to Java here. If unset, the default
# options will be: -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC
#
# Use "-XX:+UseConcMarkSweepGC" to enable the CMS garbage collector (improved
# response time). If you use that option and you run Tomcat on a machine with
# exactly one CPU chip that contains one or two cores, you should also add
# the "-XX:+CMSIncrementalMode" option.
JAVA_OPTS="-Djava.awt.headless=true -Xmx1280m -XX:+UseConcMarkSweepGC"


回答5:

Goto your catalina.sh

Add these line at the beginning

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 
-server -Xms512m -Xmx1024m
-XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m 
-XX:MaxPermSize=256m -XX:+DisableExplicitGC"

Then start your tomcat using startup.sh