IBM Support

Performance issues occur during XSLT compiling on WebSphere Application Server 7.0 and later

Troubleshooting


Problem

Changes to how the XSLT interprets and compiles XML sources may affect how applications perform when processing XML data. This technote discusses how to enable the previous implementation, especially if the application was migrated from an earlier version of WebSphere Application Server.

Diagnosing The Problem

With IBM J9 SDK 6.0 and later, the newer "XL TXE-J compiler", which replaced the "XSLT4J interpreter", will optimize the transformations as it assumes that the same transformation will be used multiple times. However in very few cases (where the application does not reuse the same transformations), this can cause synchronized blocking of threads leading to performance issues.

In these situations, the majority of blocked threads are calling the method com/ibm/xtq/xslt/drivers/XSLTLinker.compileProgram2(). However the synchronized lock may be continuously moving from one thread to another as each operation complete, causing the performance problems.

Example of a blocked thread:


"WebContainer : 30" J9VMThread:0x00000000448F2800, j9thread_t:0x00000100218C63E0, java/lang/Thread:0x0000000743435E40, state:B, prio=5
(native thread ID:0x45D00C5, native priority:0x5, native policy:UNKNOWN)
Blocked on: java/lang/Class@0x0000000740000000 Owned by: "WebContainer : 21" (J9VMThread:0x0000000044640100, java/lang/Thread:0x000000074416C9D0)
Java callstack:
at com/ibm/xtq/xslt/drivers/XSLTLinker.compileProgram2(Bytecode PC:646(Compiled Code))
at com/ibm/xtq/xslt/drivers/XSLTLinker.compileProgram(Bytecode PC:79(Compiled Code))
at com/ibm/xtq/xslt/drivers/XSLTLinker.compileProgram(Bytecode PC:13(Compiled Code))
at com/ibm/xtq/xslt/drivers/XSLTCompiler.linkAndCodeGen(Bytecode PC:24(Compiled Code))
at com/ibm/xtq/xslt/drivers/XSLTCompiler.compile(Bytecode PC:45(Compiled Code))
at com/ibm/xtq/xslt/jaxp/compiler/TransformerFactoryImpl.createTemplates(Bytecode PC:723(Compiled Code))
at com/ibm/xtq/xslt/jaxp/AbstractTransformerFactory.newTransformer(Bytecode PC:4(Compiled Code))

...
...

When all of the WebContainer threads become blocked in this way, the XSLT compiler may be consuming more overhead than intended and even prevent new traffic to the application.

Resolving The Problem

To revert back to the XSLT4J interpreter, set the following Java property either in the admin console, or as a "-D" generic JVM argument:

NAME: javax.xml.transform.TransformerFactory

VALUE: org.apache.xalan.processor.TransformerFactoryImpl

More information can be found here:


Migrating to the XL-TXE-J (SDK 6.0)
http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=%2Fcom.ibm.java.doc.user.aix32.60%2Fuser%2Fxml%2Fxslt_migrate.html

Migrating to the XL-TXE-J (SDK 7.0)
http://pic.dhe.ibm.com/infocenter/java7sdk/v7r0/index.jsp?topic=%2Fcom.ibm.java.aix.70.doc%2Fuser%2Fxml%2Fxslt_migrate.html

Migrating to the XL-TXE-J (SDK 7.1)
https://www.ibm.com/support/knowledgecenter/SSYKE2_7.1.0/com.ibm.java.aix.71.doc/user/xml/xslt_migrate.html

Migrating to the XL-TXE-J (SDK 8.0)
https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.aix.80.doc/user/xml/xslt_migrate.html

[{"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Component":"Performance and High CPU Utilization","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"}],"Version":"9.0;8.5.5;8.5;8.0;7.0","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]

Document Information

Modified date:
08 March 2023

UID

swg21639667