You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hugegraph.apache.org by "dosubot[bot] (via GitHub)" <gi...@apache.org> on 2024/07/12 08:48:21 UTC

Re: [I] [Bug] Memory leaks occur in HugeGraph Server during data writing. [incubator-hugegraph]

dosubot[bot] commented on issue #2578:
URL: https://github.com/apache/incubator-hugegraph/issues/2578#issuecomment-2225115557

   <!-- Answer -->
   To resolve the memory leak issue in HugeGraph Server during data writing, specifically related to the `CachedGraphTransaction` and the backlog of tasks in the `EventHub`, you should ensure that the `unlistenChanges` method is called to remove the event listeners when they are no longer needed. This will help prevent the accumulation of tasks in the `EventHub`.
   
   The `unlistenChanges` method is already defined in the `CachedGraphTransaction` class and is called in the `close` method. Ensure that the `close` method is properly invoked when the transaction is done to clean up the event listeners.
   
   Here is the relevant part of the code:
   
   ```java
   @Override
   public void close() {
       try {
           super.close();
       } finally {
           this.unlistenChanges();
       }
   }
   
   private void unlistenChanges() {
       // Unlisten store event
       this.store().provider().unlisten(this.storeEventListener);
   
       // Unlisten cache event
       EventHub graphEventHub = this.params().graphEventHub();
       graphEventHub.unlisten(Events.CACHE, this.cacheEventListener);
   }
   ```
   
   Additionally, ensure that the `reset` method in the `GraphTransaction` class is properly invoked to clear any accumulated state that might contribute to memory leaks. The `reset` method clears various collections that hold transaction state, which is crucial for preventing memory leaks.
   
   Here is the relevant part of the `reset` method:
   
   ```java
   @Override
   protected void reset() {
       super.reset();
   
       // Clear mutation
       if (this.addedVertices == null || !this.addedVertices.isEmpty()) {
           this.addedVertices = InsertionOrderUtil.newMap();
       }
       if (this.removedVertices == null || !this.removedVertices.isEmpty()) {
           this.removedVertices = InsertionOrderUtil.newMap();
       }
       if (this.updatedVertices == null || !this.updatedVertices.isEmpty()) {
           this.updatedVertices = InsertionOrderUtil.newMap();
       }
       if (this.addedEdges == null || !this.addedEdges.isEmpty()) {
           this.addedEdges = InsertionOrderUtil.newMap();
       }
       if (this.removedEdges == null || !this.removedEdges.isEmpty()) {
           this.removedEdges = InsertionOrderUtil.newMap();
       }
       if (this.updatedEdges == null || !this.updatedEdges.isEmpty()) {
           this.updatedEdges = InsertionOrderUtil.newMap();
       }
       if (this.addedProps == null || !this.addedProps.isEmpty()) {
           this.addedProps = InsertionOrderUtil.newSet();
       }
       if (this.removedProps == null || !this.removedProps.isEmpty()) {
           this.removedProps = InsertionOrderUtil.newSet();
       }
       if (this.updatedOldestProps == null || !this.updatedOldestProps.isEmpty()) {
           this.updatedOldestProps = InsertionOrderUtil.newSet();
       }
   }
   ```
   
   Make sure that both the `close` and `reset` methods are called appropriately in your application to avoid memory leaks <sup>[[1]](https://github.com/apache/incubator-hugegraph/blob/master/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/backend/cache/CachedGraphTransaction.java)</sup><sup>[[2]](https://github.com/apache/incubator-hugegraph/blob/master/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/backend/tx/GraphTransaction.java)</sup>.
   
   
   <!-- Dosu Comment Footer -->
   *To continue talking to [Dosu](https://dosu.dev), mention @dosu.*
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@hugegraph.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@hugegraph.apache.org
For additional commands, e-mail: issues-help@hugegraph.apache.org