BB,

It sounds like you are talking about what used to be called "batch
processing". The workload is simply kicked off from a web request. Does it
(attempt) to return a request to the user? Are timeouts and issue?

As far as available RAM - the obvious solution here is to move to a 64-bit
OS. We've been using AMD Opterons and SuSE Linux for high-memory Tomcat (JVM
heap > 2GB) for a couple of years now. But I'm also running Windows XP _64
on my desktop and its JVM seems able to take more than 2GB also.  We have a
somewhat similar problem, in that we have to dynamically build an in-memory
"cube" of analytical data for charting and what-if exploration of
results.But our reponses typically come back in between 15 seconds and a
couple of minutes.

Depending on how large your session is, you may not really want to use
clustering - because your sessions are replicated across all or a subset of
machines. 

However simple load balancing with session affinity might help you scale
your solution - either with multiple Tomcat's on a single machine or on
separate machines.

But ultimately, I think you are going down the correct path to consider
spawning a separate JVM to handle this if it is a true "batch request". From
what I know (please correct me if I'm wrong here) Tomcat is definitely
optimized for handling larger numbers of "relatively" small requests. Its
also much easier to tune Tomcat if you have a larger numbers of similarly
sized workloads (requests). On mainframe transaction processing the analogy
was to an hour glass - if you mixed a few pebbles in with all of the grains
of sand, you ended up clogging up the works for everyone - not just
yourself.

This also lets you allocate CPU resources to these separate JVM as you wish
- if its all in Tomcat, you have much less control.

Also, if communication has to occur back to a Tomcat user, you might
consider using Java Messaging Service for this - at which point you should
look at Jboss or similar application server that has Tomcat and a JMS
bundled together.

Hope these thoughts are useful.

 - Richard


> -----Original Message-----
> From: BB Commish [mailto:[EMAIL PROTECTED] 
> Sent: Friday, November 18, 2005 10:50 AM
> To: users@tomcat.apache.org
> Subject: Managing concurrent high memory processes
> 
> We have a Struts application running on Tomcat where a few 
> actions within the app can invoke processing that consumes 
> 300+ MB of RAM and can run for several hours. The issue is 
> how to make the application more scalable to accommodate 
> multiple concurrent 'high load' processes and also make 
> better use of servers with available RAM beyond the jvm 
> limits (we have used both Sun and JRockit jvms - typically on 
> Win2k3 as per customer requirements).
> 
> Would Tomcat clustering/load balancing be suited to this 
> problem? Or is it more geared to managing high volumes of 
> requests rather than just dealing with certain high load 
> requests that need special attention?
> 
> We have also considered spawning a separate jvm instance (or 
> retrieving from a pool more likely) to handle each high load 
> request with the 'normal' 
> requests being handled within the jvm running Tomcat. Is this 
> a feasible option?
> 
> I will appreciate any comments. Thanks.
> 
> 
> 
> ---------------------------------------------------------------------
> 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]

Reply via email to