tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Craig R. McClanahan" <craig...@apache.org>
Subject Re: Memory Usage and Garbage Collection
Date Fri, 03 Jan 2003 00:12:16 GMT


On Thu, 2 Jan 2003, Brandon Cruz wrote:

> Date: Thu, 2 Jan 2003 16:16:23 -0600
> From: Brandon Cruz <bcruz@norvax.com>
> Reply-To: Tomcat Users List <tomcat-user@jakarta.apache.org>,
>      bcruz@norvax.com
> To: Tomcat Users List <tomcat-user@jakarta.apache.org>
> Subject: Memory Usage and Garbage Collection
>
> Do loaded jsp pages and/or class files ever get garbage collected when
> tomcat is running?
>

It's legal for servlet containers to destroy and release servlets and JSP
pages while the server is running, but Tomcat doesn't currently do so.
Once a servlet or JSP is loaded, it stays loaded until you reload that
particular webapp or you shut Tomcat down.

> We have a production server with several hundred virtual hosts per host,
> each with a fair share of jsp pages and with moderate to low traffic per
> host.  As time goes on, the amount of memory being used constantly grows.
> It starts off around 60MB, then goes higher and higher, getting up to around
> 100MB after a couple days.
>
> The regular GC seems to usually clean up around 2MB ([GC
> 99493K->97502K(204544K), 0.0243521 secs]) and the Full GC seems to clean up
> less than that ([Full GC 97388K->97187K(204544K), 2.4269915 secs]).
>
> Since I have the -Xmx and -Xms set to 200MB, the 204544K number never gets
> resized, but the number before the -> seems to slowly and steadily rise.
>
> Full GC seems to run quite often, every few seconds, GC runs once in a
> while, but spits out about 50 lines at once every time it runs.  Is this
> normal?  Shouldn't Full GC only run once in a while?
>
> I am starting to think that as classes and jsp's are loaded, they stay in
> memory and are never released until tomcat is restarted, which means that
> there is eventually a point where all the classes will load and I just need
> to have enough memory to support that without having to use swap space.
>

It's not just the classes -- it's the object instances created from those
classes that take up space (the bytecodes of the class itself exist only
once).

> The problem occurs when the memory usage number before the -> gets up to
> about 130.  The system is using swap space and eventually out of memory
> errors start showing up.
>
> Any ideas?  More Ram, more tuning, different site architecture?
>

If you're using swap space, you probably have your max heap size (-Xmx)
too large for the amount of physical memory that is available.  I'd
definitely start by either reducing -Xmx or increasing the amount of
physical RAM.  If reducing -Xmx gives you OutOfMemoryException errors,
then increasing RAM is the only option.

The second thing I'd do is review my applications for places where they
might be maintaining references to data in between requests, either in
instance variables of the servlet or JSP class or by keeping too many
things in the user's session for too long.  If there are such references,
your user data objects cannot be GC'd and you'll end up with exactly the
pattern you describe (slowly increasing memory use).

> Thanks in advance?
>
> Brandon

Craig


--
To unsubscribe, e-mail:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-user-help@jakarta.apache.org>


Mime
View raw message