[jboss-jira] [JBoss JIRA] (WFLY-12031) Memory leak in wildfly transaction client

Brian Stansberry (Jira) issues at jboss.org
Fri Jul 12 23:17:01 EDT 2019


     [ https://issues.jboss.org/browse/WFLY-12031?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Brian Stansberry resolved WFLY-12031.
-------------------------------------
    Fix Version/s: 18.0.0.Beta1
       Resolution: Done


Fixed via https://github.com/wildfly/wildfly/pull/12424

> 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
> Windows 10
>            Reporter: Joachim Petrich
>            Assignee: Cheng Fang
>            Priority: Critical
>             Fix For: 18.0.0.Beta1
>
>
> 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
> {code:java}
>         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*);
> {code}
> and for removing the entire file path:
> {code:java}
>         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()*);
>  {code}
> 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.
> {code:java}
>                         String xidString = filePath.toString().substring(filePath.toString().indexOf(
>                         		xaRecoveryPath.toString()) + xaRecoveryPath.toString().length() + 1);
>                         openFilePaths.remove(xidString);
> {code}



--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the jboss-jira mailing list