Hello,

 

I have a question about a memory usage pattern that I am trying to figure
out. I am using seefusion to watch our server and this is what I am seeing:

 

1.       We have two webservers and a loadbalancer with equal distribution
and sticky sessions enabled

2.       Memory usage will be constant around 20%-30% in use throughout the
day.

3.       When I check the taskManager on the machine I see jrun using only
300-400 megs. 

4.       The arguments to the JVM are  -Xms1024m -Xmx1024m
-XX:MaxPermSize=384m -XX:+UseParallelGC

5.       The app uses client variable storage with a MSSQL database backend

6.       The client variable data per client (in some edge cases) can grow
to be very large 

 

What I am seeing is a specific customer comes along and  uses our app  and
they have some very large strings of data stored in the client scope and
invoke some operations that do a lot of array processing on large arrays.
These requests are big and slow. We see a big spike in the memory usage. It
continues to grow and grow.  Then the client appears to disconnect and leave
the website (in fact, we verified by banning their IP to test). But the
memory never gets released. The task manager now reports jrun up at over 1
gig of memory.  

 

We have a script that runs every 30 seconds that checks memory usage and
does a full GC when less than 100 megs of memory remain. Prior to
implementing that script, we were seeing some out of memory errors.  

 

While watching seefusion we can see the memory creep up to 90%+, and then to
10% when the GC script runs.  But it immediately begins to climb again. And
this process repeats. The traffic on this server is no different than our
other server which sits  at 19% memory usage.  Now, if we restart CF, the
problem goes away, and memory usage stays at under 20%.

 

My questions are:

 

1.       I understand that setting -Xms1024m -Xmx1024m should immediately
allocate that amount of ram to the JVM. So why does the taskManager report
the memory usage at 300 megs (prior to the event)?

2.       If a bunch of requests cause memory usage to spike and then those
requests die off, should seefusion show memory usage at 90% because thats
whats allocated to the JVM and now 'claimed'? So would that be a normal
operating condition?

3.       What would cause the memory to immediately climb back up after a
full GC after 'something' happened but not climb after the service is
restarted?

 

Thanks for your insights guys!

 

Brook

 




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Order the Adobe Coldfusion Anthology now!
http://www.amazon.com/Adobe-Coldfusion-Anthology/dp/1430272155/?tag=houseoffusion
Archive: 
http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:339759
Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm
Unsubscribe: http://www.houseoffusion.com/groups/cf-talk/unsubscribe.cfm

Reply via email to