Comments (1)
If you can open a PR with a test that reproduces the issue, I can take it from there - if it will be too tricky to get it repro'd in a test, then a standalone app is fine too; the main thing is just that I have a way to do reliably see the same memory behaviour you are seeing.
One thing to keep in mind, especially when working with binaries, is that within the context of a process, binary data will be shared - the original binary which is referenced won't be released until all of the shared references (sub-binaries) are garbage collected, which can take some time if the process isn't particularly active, at least once the heap grows large enough.
You can see if this is the problem by examining the memory allocations in Observer, or dumping them with :erlang.system_info/1
, e.g. :erlang.system_info(:allocated_areas)
. You can do the same at the process level with :erlang.process_info/1
, e.g. :erlang.process_info(:binary)
, the :garbage_collection
and :garbage_collection_info
flags can be useful as well. What you are looking for is signs that objects are accumulating on the process heap, and garbage collection is not collecting enough in each cycle.
Based on what your snippet indicates, I have a feeling it is probably sub-binary references causing the memory leak - if that's the case there are a couple of strategies for dealing with that. One is using :binary.copy/1
on binary values you are inserting into the graph to force them to not reference the original large binary. If that's not doing it, then explicitly forcing a collection may be necessary - perhaps after remove_vertex_labels
is called.
Once you post a repro, we can dig in further :)
from libgraph.
Related Issues (20)
- Hangs on iex -S mix with version 0.13.3 HOT 1
- Graph.edges/3 return empty list for undirected graph
- add_vertices/2 with labels?
- Question: Core in Erlang HOT 1
- get_shortest_path doesn't work correctly on undirected graphs HOT 3
- Functions delegate to Graph.Directed for undirected graph HOT 1
- Duplicate vertex ids when adding high number of vertices HOT 12
- Lazy traversal HOT 5
- Publish to Hex HOT 1
- Subgraph is missing labels
- New release? HOT 1
- Save metadata for vertices and edges HOT 3
- finding cycles in directed graph HOT 2
- Duplicated edges from Graph.edges(g, v) when v has a self-reference? HOT 5
- Incorrect Return Value of Preorder/Postorder
- add support for leaf_vertices function?
- Unexpectedly endless pathfinding from the nth size. HOT 2
- Infinite loop when nil passed in as graph HOT 2
- Poor performance of Graph.delete_vertex/2 in large graphs
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from libgraph.