Tomcat FAQMemory | |
Preface |
This page discusses various memory issues. In a nutshell - if your
computer has less than 128MB of ram - you will probably have trouble.
Anyhow, also read the following threads for other memory related issues:
Also look at
JProbe,
or OptimizeIt, or other
profiling tools. Lots of people recommend these tools.
This is not an endorsement for them, I just
notice other people like them.
JSP Recompilation |
If your application uses JSPs which are frequently recompiled
at runtime, e.g. headers that change value hourly, please make
sure to read the JSP HOW-TO page and RELEASE NOTES documents.
You may wish to tune the JSP compiler configuration to prevent
memory leaks. Of course, these are documents you should have
read by now anyways..
|
|
Answers |
How do I adjust memory settings?
First look at java -X to determine what parameters to set.
Then you can set them via the environment variable JAVA_OPTS .
Read the files catalina.bat or catalina.sh for
more information on JAVA_OPTS.
Why do I get OutOfMemoryError errors?
Many reasons.
-
You're out of memory. Simple as that - add more to your heap.
- You're out of memory. You have code which is hanging onto object
references and the garbage collector can't do its job. Get a
profiler to debug this one.
- You ran out of file descriptors. If you are on a *nix system,
it has been observed that an OutOfMemoryError can be thrown
if you run out of file descriptors. This can occur if your
threshold is too low. The
ulimit program
can help you out here. You also may need to account for
socket connections too when thinking about these thresholds.
Google is your friend for getting more information about this
topic.
- You have too many threads running. Some OS's have a limit to the number
of threads which may be executed by a single process. (Which is what the
JVM is.) Refer to your OS docs for more information on how to raise this
threshold.
- Your OS limits the amount of memory your process may take. OK, this
one is grasping at straws.
- The JVM has a bug. This has been known to happen with JVM1.2.? and using
EJB's with another servlet engine.
- Not actually a reason - but on your particular platform, look at the
java -X options. They may be VERY helpful.
How much memory is Tomcat/webapp/??? using?
-
To find out how much memory Tomcat is using, you might be able to
use the
Runtime class provided by the JDK.
-
You can't find out how much memory a webapp is using. The JVM
doesn't give us these detail.
-
You can't find out how much memory a ??? is using. The JVM
doesn't give us these detail.
-
That being said, a memory profiling tool might prove the above
statements wrong - but you probably don't want to use them
in a production environment.
|
|