[ 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]