xml-xalan-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Henry Zongaro (JIRA)" <xalan-...@xml.apache.org>
Subject [jira] Commented: (XALANJ-2052) Xalan memoryleak when transformation runs in an own thread
Date Thu, 03 Feb 2005 14:29:20 GMT
     [ http://issues.apache.org/jira/browse/XALANJ-2052?page=comments#action_58558 ]
     
Henry Zongaro commented on XALANJ-2052:
---------------------------------------

Please take a look at Jira bugs XALANJ-1999 and XALANJ-1844.  The patches associated with
one or both of those bug reports probably fix the probably you are reporting.

> Xalan memoryleak when transformation runs in an own thread
> ----------------------------------------------------------
>
>          Key: XALANJ-2052
>          URL: http://issues.apache.org/jira/browse/XALANJ-2052
>      Project: XalanJ2
>         Type: Bug
>   Components: transformation
>     Versions: 2.6
>  Environment: Reproducable on Windows 2000 and up, Linux 2.6 and Solaris 9 with JVM 1.4.1/1.4.2/1.5
>     Reporter: Daniel Pfeifer

>
> Dear Sirs,
> We are currently using Xalan in a live environment with high performance requirements.
Ever since we started using Xalan we have been experiencing a problem during transformation.
After our server has been serving a couple of million requests it keeps consuming more and
more memory until the virtual machines responds with an OutOfMemoryError. We have been profiling
the application and came to the conclusion that the Xalan is leaking memory when TransformerImpl.transform()
is executed in its own thread (it's started in an own thread so we can wait for the thread
to die for like 5 seconds and if the thread is not finished yet, we will get back to the thread
at some later time and check again).
> However, the Profiler (there is a Profiler capture available if someone needs it) pointed
out following classes as consuming huge amounts of
> memory:
> org.apache.xerces.parser.SAXParser
> org.apache.xml.utils.XMLReaderManager
> org.apache.xalan.xsltc.dom.SAXImpl
> According to the profiler the XMLReaderManager holds a class-variable called m_inUse
of type Hashtable. This table seems to increase for every new transformation. It never ever
decreases, and that even though every single thread in which transformer.transform(a,b) executes
has been finishing normally.
> Since we are under pressure to find a solution to this problem I've been wondering if
one knows a workaround for this problem.
> === TransformerTest.java =====================================
>     public String doTransformation(String xml, String xsl) {
> 	  // ... Code to create the TransformerFactory ...
>         Templates t = transformerFactory.newTemplates(new
> StreamSource(new StringReader(xsl)));
>         final Transformer transformer = t.newTransformer();
>         StringWriter stringWriter = new StringWriter();
>         final TransformerError transformerError = new TransformerError();
>         final Source xmlSource = new StreamSource(new StringReader(xml));
>         final Result transformerResult = new StreamResult(stringWriter);
>         Thread transformerThread = new Thread() {
>             public void run() {
>                 try {
>                     transformer.transform(xmlSource, transformerResult);
>                 } catch (Exception e) {
>                     transformerError.setException(e);
>                 }
>             }
>         };
>         transformerThread.start(); // Start the Transformer thread.
>         try {
>             transformerThread.join(5000); // Wait for some seconds, hopefully thread
is done after this.
>             if (transformerThread.isAlive()) {
> 			// outside the scope of this example
>             }
>         } catch (InterruptedException e) {
> 		// outside the scope of this example
>         }
>         if (transformerError.getException() != null) {
>             throw transformerError.getException();
>         }
>         String xsl = stringWriter.toString();
>         return xsl;
>     }
>     private class TransformerError {
>         private Exception exception;
>         public Exception getException() {
>             return exception;
>         }
>         public void setException(Exception exception) {
>             this.exception = exception;
>         }
>     }
> === TransformerTest.java ============================ END ====
> Additionally I would like to add that I did try to use SAXSource, run entire Xalan-related
code in the Thread and a couple of other things. It will always leak memory unless I don't
use a Thread, which I believe is not an option for me since it does have a purpose.
> Don't hesitate to ask additional questions, any tips are helpful.
> Thanks in advance,
> Daniel Pfeifer

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-dev-help@xml.apache.org


Mime
View raw message