I am running TomEE (kind of Tomcat) server on Java 8 and using Titan 1.0.0 with Cassandra backend and Elasticsearch index as my database. In my development environment with small user connection everything works perfect but on my production server with many user connected with many db access we have an issue with memory leaks probably because Titan graph cache or something Titan relative. I have configure 4GB heap-size and after more than 10 hours of run allocated memory on heap grows to its maximum (~300Mb per hour) and it causes that GC (Garbage Collector) can't clean up anymore and remains to run continuously that causes server instance to be unresponsive.
Using VisualVM i did some memory profiling and those are my screenshots:

Any suggest how we can fix this or find the way to investigate this issue in more details? May be some GC params can help us in this case?
Titan 1.0.0 graph cache memory leaks
430 Views Asked by OctopusSD At
1
There are 1 best solutions below
Related Questions in MEMORY-LEAKS
- Python Memory Leak - Why is it happening?
- how to resize image properly without memory warning
- Ruby leaked objects are referenced by RubyVm::Env
- Why the private package String constructor (int, int, char[]) has been removed?
- Use static analysis tools to check null pointers and memory leaks in Linux device drivers
- No warning on deleting a forward declared pointer (Visual Studio)
- Unity c# List memory leak
- UIDatePicker memory leak in IOS 8.3
- PHP UDP socket memory leak
- nodejs , socket.io simple code memory leak
- Memory Leak using an UIAlertController in Swift
- valgrind shows me a leak when using libxml2
- cuda-memcheck fails to detect memory leak in an R package
- Memory Leaks and GridView
- Unable to spot Memory leak issue in below code
Related Questions in GARBAGE-COLLECTION
- JVM is functioning very differently with same flags
- Why WeakReference to a WeakRef object is not garbage collected?
- GC cleaning the object before calling onPictureTaken method
- Know what objects got garbage collected
- Practical case JVM tunning to avoid full GC
- GC overhead limit exceed when reading large file
- Can java string literals be garbage collected?. If Yes, how to prove it?
- G1 doesn't process soft references
- why do I have to swapCursor(null) in onLoaderReset?
- Is it safe to assume static variables never get cleared?
- JVM ClassUnloadingWithConcurrentMark flag
- Java 8 Metaspace - Avoid decrease
- node.js memory usage issue
- G1GC Strange behavior
- Exposing whether an application is undergoing GC via UDP
Related Questions in JAVA-8
- Why do we need to avoid mutations while coding? What is a mutation?
- Collecting inner List from outer List using Java 8
- How to get the index and max value of an array in one shot?
- Why did Java 8 introduce *Integer.sum(int a, int b)*
- How to stop a reduce operation mid way based on some condition?
- Create a pointcut based on annotation parameters
- How should I be using LambdaMetaFactory in my use case?
- How to sort an IntStream in reverse order
- ArrayOutOfBoundsException on Bean creation while using Java 8 constructs
- Java 8: stop reduction operation from examining all Stream elements
- In Ubuntu java -version gives Error occurred during initialization of VM
- Builder pattern with a Java 8 Stream
- resin project, jdk8 has a high cpu load ,but jdk7 not
- Center JoptionPaneMessageDialog in parent element of the source element that generated the event
- Implementing swing in jdk 1.8 using eclipse
Related Questions in TITAN
- How to efficiently create a vertex with a label and several properties?
- gremlin outputs different from as seen on the internet, I think in bytes
- Is there any way to create an index in titan-0.4.4 without cleaning up the storage backend?
- How to get tuples in gremlin?
- Creating graph in titan from data in csv - example wiki.Vote gives error
- Loading data into Titan with bulbs and then accessing it
- How to set a vertex's Index myself in Titan Graph Database
- How to list the nodes associated to a given vertex through intermediate nodes in TinkerPop3?
- No "Access-Control-Allow-Origin" on using POST in ajax request
- TitanGraph slows down on commit()
- Does titan (graph database) support update notifications?
- Titan 1.0.0 graph cache memory leaks
- how to make a spatial query with lucene syntax in elastic search
- How to cascade deletes in Titan DB?
- Setting up geolocation index in Aurelius Titan 0.5+
Related Questions in APACHE-TOMEE
- TOMEE + Spring + JAX-RS (NoSuchMethodError) jar conflict
- Broker queue attributes not displayed
- How to shutdown a Tomcat's instance that wont shutdown?
- Unable to load servlet listener class: com.sun.faces.config.ConfigureListener
- TomEE: How to configure multiple datasources?
- TomEE service doesn't start on Windows 7 (64 bit)
- Unable to build Hibernate SessionFactory in TomEE
- Setting up Apache Tomee with jdk1.8 for ejb application
- How to update users in TomEE JDBCRealm?
- TomEE 7 + Omnifaces 2.5.1 CDI Beans module deployment failed
- How to disable assertions in tomee-maven-plugin - What's the precedence of "args"?
- TomEE 7.0.2 how to disable CXF + RS
- TomEE Maven plugin debug w/ IntelliJ
- Titan 1.0.0 graph cache memory leaks
- TomEE JSF openejb.core.transaction.EjbTransactionUtil
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
I have seen those problems before on Titan 1.0 with Cassandra. Two things to check:
Opening And Closing The Graph
Are you opening different transaction to the graph per user or different graphs per user? i.e. are you doing:
(1)
or
(2)
Approach (1) means that each user gets their own connection to the graph with their own graph object. This is very heavy and leads to more memory usage.
Approach (2) means that every user uses the same connection but different transactions. This is preferable in my opinion. Note: This is assuming users are on different threads.
Long lived Transactions
This is the problem I had which resulted in similar GC problems to yourself. I simply kept transactions alive for too long. To speed up querying Titan caches a lot and I don't think it clears the cache unless the transaction is closed. So ideally you should have something like:
where each transaction is closed after a user is done with it.