> -----Original Message-----
> From: Wade Chandler [mailto:[EMAIL PROTECTED]
> Sent: Thursday, May 06, 2004 6:34 PM
> To: Tomcat Users List
> Subject: Re: Question about memory
> 
> Yang Xiao wrote:
> 
> >
> >>-----Original Message-----
> >>From: Wade Chandler [mailto:[EMAIL PROTECTED]
> >>Sent: Thursday, May 06, 2004 2:55 PM
> >>To: Tomcat Users List
> >>Subject: Re: Question about memory
> >>
> >>Yang Xiao wrote:
> >>
> >>
> >>>Hi,
> >>>I have development set to false and fork to true, tomcat still doesn't
> >>>release the memory, any ideas?
> >>>
> >>>Thanks,
> >>>Yang
> >>>
> >>>-----Original Message-----
> >>>From: Randall Svancara [mailto:[EMAIL PROTECTED]
> >>>Sent: Thursday, May 06, 2004 11:32 AM
> >>>To: Tomcat Users List
> >>>Subject: RE: Question about memory
> >>>
> >>>Just a silly question, but don't you also need to perform some
> >>
> >>additional
> >>
> >>>production configuration in your web.xml by setting fork equal to true
> >>
> >>and
> >>
> >>>developement equal to false.  It explains it on this page here:
> >>>
> >>>http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jasper-
> >>
> >>howto.html#Production
> >>
> >>>%20Configuration
> >>>
> >>>I made some similar modifications and I noticed that tomcat started to
> >>>release the memory when the server was not as busy.
> >>>
> >>>Randall
> >>>
> >>>
> >>>
> >>>-----Original Message-----
> >>>From: Yang Xiao [mailto:[EMAIL PROTECTED]
> >>>Sent: Thursday, May 06, 2004 9:07 AM
> >>>To: Tomcat Users List
> >>>Subject: Question about memory
> >>>
> >>>
> >>>Hi list,
> >>>
> >>>I have 3 Tomcat 5.0.19 instances running with Apache 2.019 and JK2.
> >>>
> >>>I did a simple load testing with JMeter last night and stopped it just
> >>>before I went home, so right now there's no incoming request
> whatsoever,
> >>
> >>but
> >>
> >>>TOP still shows heavy memory usage and swapping, it looks like even
> >>
> >>though
> >>
> >>>the load has subsided, Tomcat has not released the memory, what can I
> do
> >>>except restart the Tomcat instances to release the memory?
> >>>
> >>>I'm not sure if this is a valid question, so I apologize if I seem to
> be
> >>>lack of some basic understanding of how things work.
> >>>
> >>>Thanks in advance.
> >>>
> >>>Also the tomcats are started with -Xms64 -Xmx256
> >>>
> >>>
> >>>
> >>>Yang
> >>>
> >>>
> >>>
> >>>Here's the top output
> >>>
> >>>
> >>>
> >>>11:01:35  up 2 days, 15:28,  2 users,  load average: 0.65, 0.20, 0.07
> >>>
> >>>381 processes: 379 sleeping, 2 running, 0 zombie, 0 stopped
> >>>
> >>>CPU states:  cpu    user    nice  system    irq  softirq  iowait
> idle
> >>>
> >>>           total    1.0%    0.0%   56.1%   0.0%     0.0%    0.0%
> 42.7%
> >>>
> >>>Mem:   513292k av,  505136k used,    8156k free,       0k shrd,
> 64872k
> >>>buff
> >>>
> >>>       280548k active,             208500k inactive
> >>>
> >>>Swap: 1044216k av,  528888k used,  515328k free
> 7388k
> >>>cached
> >>>
> >>>
> >>>
> >>>  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU
> >>
> >>COMMAND
> >>
> >>> 8333 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:02   0 jsvc
> >>>
> >>> 8335 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:03   0 jsvc
> >>>
> >>> 8337 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:02   0 jsvc
> >>>
> >>> 8338 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:00   0 jsvc
> >>>
> >>> 8340 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:00   0 jsvc
> >>>
> >>> 8570 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8571 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8572 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8573 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8589 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8596 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8601 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8604 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:02   0 jsvc
> >>>
> >>> 8607 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:02   0 jsvc
> >>>
> >>> 8610 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8612 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8616 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8624 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8631 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8633 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8646 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8684 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:02   0 jsvc
> >>>
> >>> 8689 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8692 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:02   0 jsvc
> >>>
> >>> 8695 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8697 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8699 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8700 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8703 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8705 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:00   0 jsvc
> >>>
> >>> 8707 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8709 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8714 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8717 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8720 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8721 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:00   0 jsvc
> >>>
> >>> 8726 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8729 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8731 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8734 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8739 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8741 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8744 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8747 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8751 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8755 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:00   0 jsvc
> >>>
> >>> 8758 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:02   0 jsvc
> >>>
> >>> 8761 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8764 tomcat    16   0  203M 158M 80744 S     0.0 31.5   0:01   0 jsvc
> >>>
> >>> 8926 tomcat    15   0  203M 158M 80744 S     0.0 31.5   0:00   0 jsvc
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>---------------------------------------------------------------------
> >>>To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>For additional commands, e-mail: [EMAIL PROTECTED]
> >>>
> >>>---------------------------------------------------------------------
> >>>To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>For additional commands, e-mail: [EMAIL PROTECTED]
> >>>
> >>>
> >>>
> >>
> >>As far as system memory aquired by the java process goes, this memory
> >>will not be released, so you want noticed anything different about top
> >>if your system will actually increase the memory to that value.  The VM
> >>will hold onto this memory for performance reasons.  A real indicator if
> >>tomcat is using all of the allocated memory can be obtained from the
> >>java call:
> >>Runtime.getRuntime().freeMemory()
> >>contrast the long value to the value from
> >>Runtime.getRuntime().totalMemory()
> >>
> >>The JVM max heap option -Xmx=nMB is a function of increasing the maximum
> >>heap size allowed by the executable.  The heap will not be returned to
> >>the OS, but will be kept by the C runtime.  This is a standard C/C++
> >>memory issue.  One can a memory allocation scheme of some type of shared
> >>memory pool in a C application to perform different tricks for newly
> >>allocated objects, but the norm is to use the heap (performance is the
> >>man reason to use the heap).  So, as your application creates more and
> >>more objects the memory will increase and the memory created in that way
> >>will not be released to the system, thought it may be resuable by the VM
> >>after it has been garbage collected.
> >>
> >>The point is that you can use something like top to try to measure java
> >>memory performance (necessarily).  I haven't used JMeter, but if it can
> >>give you stats on the internal VM memory usage based on freeMemory and
> >>totalMemory then that is the best resource.
> >>
> >>In java you create an array of chars
> >>char [] somechars = new char[1000];
> >>
> >>this memory is global app memory now and allocated on the heap.
> >>
> >>In C one could do something like
> >>char somechars[1000];
> >>
> >>This is not heap allocated memory and will be freed back to the os, and
> >>will be noticeable in something like top.
> >>
> >>I hope that is clear enough for understanding.  The main idea is that
> >>the VM's system memory isn't necessarily the amount of memory being used
> >>by the java program running inside of it.  It is however the amount of
> >>system memory being used by the JVM.  You need to profile your
> >>application and see how much memory it is having to allocated at
> >>different times.  If you can use more local variables and help get them
> >>to the garbage collector fast enough then you'll be able to help your
> >>system memory utilization.  The longer the memory is used the more
> >>likely another thread will have to allocate more heap memory.
> >>
> >>Wade
> >>
> >
> >
> > Hi,
> > I'm only doing the load test with a simple jsp page that displays the
> > session info. So it's not really an application that requires any kind
> of
> > memory for processing, however. Here's the manager/status page output
> for
> > all 3 tomcat instances after I have stopped the Jmeter test for about 90
> > minutes:
> >
> > Tomcat 1
> > Free memory: 39.15 MB Total memory: 233.49 MB Max memory: 256.00 MB
> >
> > Tomcat 2
> > Free memory: 50.17 MB Total memory: 120.99 MB Max memory: 256.00 MB
> >
> > Tomcat 3
> > Free memory: 42.38 MB Total memory: 234.49 MB Max memory: 256.00 MB
> >
> > And output from free -m
> >
> > Every 2s: free -m                                            Thu May  6
> > 15:41:51 2004
> >
> >              total       used       free     shared    buffers
> cached
> > Mem:           501        492          8          0          2
> 9
> > -/+ buffers/cache:        480         20
> > Swap:         1019        415        604
> >
> > My concern is why is tomcat not releasing all these memory and am I
> doing
> > something wrong in the configuration that's causing this?
> >
> > Thanks,
> >
> > Yang
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
> 
> Maybe I wasn't very clear.  I should have said...
> 
> Java unlike C++ always allocates objects on the heap (though many C++
> developers allocate a lot on the heap as well).  So, the memory the java
> VM is using is heap memory.  The heap is never given back to the OS
> unless explicit steps are taken.
> 
> I didn't want to get into this necessarily because it may or may not
> help  you.  Performance and memory play hand in hand, so you may find an
> option that resizes your heap, but affects other performance
> measures......with that said
> You can use some things from this page to play with memory and see if it
> helps you out.  If you are going to have many users however, it is best
> to let the heap keep a size it reaches.  That way the VM isn't
> allocating memory from the OS and it is able to perform as best as it
> can.....this is of course for 1.4.2 I think 1.4.1 as well...not sure how
> tomcat acts with these settings though
> http://java.sun.com/docs/hotspot/gc1.4.2/
> You want to look at
> -Xms
> -Xmx
> -XX:MinHeapFreeRatio
> -XX:MaxHeapFreeRatio
> 
> However....about your system...
> 
> Notice that the free memory (java related free memory) is low in your
> processes, so that is fine.  Tomcat is using a normal amount of memory
> for the tomcat server in those cases.  The JVM is almost using it's max
> heap which you have it set which is 256MB.  Tomcat will use roughly
> 40MB+-5 (this has been my observation, and is observed in your free
> memory stats as well).  The heap allocation is a function of the JVM.
> 
> I don't know what types of tests JMeter does or does not perform, and
> I'm not sure what type of JSP tests you are running, nor what types of
> manager applications come with JMeter.  I notice you mention the simple
> JSP tests with sessions, but what types of objects are you allocating?
> 
> Tomcat also allocates objects for a request.  You have session objects,
> request objects, and things like this.  You have memory taken by the
> query string and any post data.  These all use memory.  These objects
> don't stay in memory after they are no longer referenced and have been
> collected, but the heap memory that may have been allocated for them is
> kept by the process and not given back to the OS.
> 
> This is normal.  This is what you are seeing in your free dump.  I like
> to use top and then do SHIFT-M when it starts.  Notice field RSS which
> is the memory used per process in descending order.  That's a preference
> of course.
> 
> But, as far as your memory goes this seems normal.  Are you using -Xms
> (initial heap size) flag in your catalina.sh file in your JAVA_OPTS
> variable?  If so what is it set to?  Is your test hitting the server
> very hard....like you keep hitting a jsp page making it create Request,
> Session, Response, and other instances of objects over and over again
> very quickly?
> 
> These are just some questions relating to why your heap is growing to
> the size that it is.  As far as tomcat goes....it's only using the
> normal amounts of memory on your machine around 40MB.
> 
> I hope that is a little clearer.  The heap has to be growing for one
> reason or another usually utilization, but the settings from the URL I
> gave  you should sum it up a bit.  If you have your
> -XX:MinHeapFreeRatio=70
> -XX:MaxHeapFreeRatio=40
> You will notice some resizing to which you are asking for I think, but
> the performance may be worse than you would expect because the VM will
> be doing some things that take up resources and keep it from doing what
> it needs to do.  If you don't think you are going to be using that much
> memory in your server you could set -Xmx128m  but again...if you use
> more than this in one instance it will bomb with out of memory errors
> unless a GC will free up it's memory.  The vm will attempt to collect
> before breaking.
> 
> The best thing to do is to read up on the java heap and memory in that
> article.  If you don't understand it I would recommend not changing it.
>   If you understand it and think you have a solution that is what you
> want to do then you should be good to go.
> 
> Anyways,
> 
> hope that helps you out some.
> 
> Wade
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
[Yang Xiao] 

Hi,
Many thanks for the info! I will read the article and see if I can put all
these together.

Yang

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to