I’m using *Neo4j 2.3.0* in *Java*. I have 16 GB RAM, running the code on 
MAC OSX Laptop, using "*-Xmx12g -Xms12g*" as VM arguments.

I’ve encountered a “GC overhead limit exceeded” problem in Neo4j Java API.


In order to do experiments with lots of queries, I have a program which 
opens a transaction over different query.db's and get the answers of that 
from my own framework which is wrapped in an object (It runs a query and 
print its running time in a file).


So, for running the query, I don’t use *Cypher*.


For each query I open *two transactions* over a query.db and a data.db, 
initialize my framework and run it. The memory usage slightly increases and 
the “GC overhead” finally happens.


try (Transaction txG = knowledgeGraph.beginTx()) {
     try (Transaction txQ = queryGraph.beginTx()) {
          MyObj myFramework = new MyObj();
          printTheResultsIntoTheFile(framework.run());
          myFramework =null;
          txQ.success();
          txQ.close();


*These are some of my endeavors to get rid of this error:*

   1. 
   
   1. After I’ve used a monitoring program to dump the heap, I’ve found 
   that there is some problem with this “
   *org.neo4j.io.pagecache.impl.muninn.MuninnPageCache*” So, I’ve tried to 
   set the page cache size and limit it to a small value:
   2. 
      1. 
      
      dataGraph = new 
      GraphDatabaseFactory().newEmbeddedDatabaseBuilder(MODELGRAPH_DB_PATH) 
      .setConfig(GraphDatabaseSettings.pagecache_memory, 
      "500M").newGraphDatabase();
      
   However, still the "memory leakage” problem exists.
   1. 
      
      
      2. 
      
      2. After tx.success(), I called the tx.close() to make sure that it 
      doesn’t use the memory.
      3. 
      
      3. After using my framework(object) to find the answers of a query, I 
      explicitly set it to null. topkFramework=null;
      4. 
      
      4. I called System.gc(); and System.runFinalization();
      5. 
      
      5. I changed all of my static variables like MyCacheServer or 
      MyNeighborIndexer to non-static ones and in each query, I made them 
clear, 
      and explicitly set them to null.
      
      queryNodeIdSet.clear(); queryNodeIdSet = null; queryNodeIdSet = new 
      HashSet<Long>();
      3. I've used MemoryAnalyzer (MAT) for eclipse. The biggest object is 
   *org.neo4j.io.pagecache.impl.muninn.MuninnPage* which got 3.54 GB of 
   memory. Other objects are ok in my case because of some nodes/relationships 
   id indexing. (The dataset itself is 3.15 GB, I really don't want this much 
   of caching)
   
Could you please help me on this? I've asked this question 
<http://stackoverflow.com/questions/35876057/neo4j-java-api-gc-overhead-limit-exceeded-after-running-multiple-queries>
 
in stackoverflow also.


-- 
You received this message because you are subscribed to the Google Groups 
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to neo4j+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to