[ http://issues.apache.org/jira/browse/XALANJ-2052?page=all ]
Brian Minchau updated XALANJ-2052: ---------------------------------- Fix Version: 2.7 > 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 > Fix For: 2.7 > > 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 - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]