Welcome to part three of my asynchronous thread, JVM out-of-memory 
discussion.

To recap:  we have a process that creates ~1300, seven to ten page pdf 
form letters.  This is done asynchronously using the <cfthread...> tag 
so that each thread can create one letter with associated database 
transactions and disappear.  There was originally a problem with the 
threads - that once opened, they never closed.  This appears to have 
been resolved yesterday by updating the ColdFusion server from 8.0.0 to 
8.0.1.

Now the issue is that if the process is allowed to run all at once, all 
the JVM memory is used up and the system starts throwing out-of-memory 
errors.  The idea I am working with, as suggested in the previous 
discussion, is to throttle the process so that there are pauses.  This 
should allow time for memory to be cleared between batches.

The trouble is that this is not happening.  Even with the pauses the 
memory does not seem to be released until the entire process runs.  My 
theory is that the root thread spawning the child <cfthreads> is holding 
onto the memory objects, even the ones created in the child threads, 
until it is finished.  So it can not be cleared until the main thread 
finishes.

Is this logical?  How autonomous are variables created in spawned 
threads?  Is the default to create them in a 'thread' scope that is 
dropped when the child thread is done or in the calling parent thread?  
Is this somehow controllable?  Can I declare the variables to be local 
to the thread, if so how?  Does the 'Var' command work in threads the 
same as it does in functions to make a variable local?

On a related note, the main memory hog is the <cfreport...> tag.  If I 
comment out this tag, the memory usage only makes a small bump when the 
test code is run.  The question is that we are using the 'filename' 
property of the <cfreport...> tag so there is no identified variable to 
work with here is there?  What should be happening with whatever memory 
ColdFusion used to create the PDF file described in the <cfreport...> 
call after it is done with it?

      <!--- BUILD REPORT --->
      <cfreport template="ren.cfr" format="pdf" overwrite="yes"
        filename=#vOutputFilePath#>     
        <cfreportparam name="pFirmNo" 
value=#ResultFirms["firmno"][threadIndex]#>
        <cfreportparam name="pIssueDate" value=#DateFormat(pIssueDate, 
'mm/dd/yy')#>
        <cfreportparam name="pRenewalId" value=#vRenewalSeq#>
      </cfreport>


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to 
date
Get the Free Trial
http://ad.doubleclick.net/clk;203748912;27390454;j

Archive: 
http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:307659
Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm
Unsubscribe: 
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4

Reply via email to