]
Thomas Jenkinson reassigned WFLY-12031:
---------------------------------------
Assignee: Cheng Fang (was: Thomas Jenkinson)
Memory leak in wildfly transaction client
-----------------------------------------
Key: WFLY-12031
URL:
https://issues.jboss.org/browse/WFLY-12031
Project: WildFly
Issue Type: Bug
Components: Transactions
Affects Versions: 15.0.1.Final
Environment: wildfly-transaction-client-1.1.3.Final
wildfly.15.0.1.Final
Window 10
Reporter: Joachim Petrich
Assignee: Cheng Fang
Priority: Critical
After a volume run of our system we recognized millions of entries in the openFilePaths
Object of class FileSystemXAResourceRegistry. When enabling traces for
org.wildfly.transaction it seems that for adding an entry a xid string is used
XAResourceRegistryFile(Xid xid) throws SystemException {
xaRecoveryPath.toFile().mkdir(); // create dir if non existent
final String xidString = SimpleXid.of(xid).toHexString('_');
this.filePath = xaRecoveryPath.resolve(xidString);
openFilePaths.add(*xidString*);
and for removing the entire file path
protected void removeResource(XAResource resource) throws XAException {
if (resources.remove(resource)) {
if (resources.isEmpty()) {
// delete file
try {
if (fileChannel != null) {
fileChannel.close();
}
Files.delete(filePath);
// deleting using the filepath as key caused a memory leak,
// if xid string have been added, therefore build the xid string
for removing
openFilePaths.remove(*filePath.toString()*);
We didn't find any code where this xid are cleaned up.
As workaround we additionally extract the xid String from the file path and remove the
corresponding entry.
String xidString =
filePath.toString().substring(filePath.toString().indexOf(
xaRecoveryPath.toString()) + xaRecoveryPath.toString().length()
+ 1);
openFilePaths.remove(xidString);