Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the node.js memory breakdown?

Tags:

We are deploying a Node.js application. This app seems to be consuming way more RSS memory than it should. So we started to dive into things and we found the following, thanks to process.memoryUsage();

  • The RSS memory grows quickly to about 400MB and stays more or less stable in a 400MB-500MB, with small ups and small downs (Garbage collector running?)

  • The heapUsed quickly grows to 50MB and then stays at that level (between 20MB and 100MB).

  • The heaptotal is always about 30MB more MB than the heapUsed.

As you see there is a huge difference between the heap and the RSS, which is where I think we should focus. There doesn't seem to be any very significant leak in our heap.

Now, what's in RSS that is not in the heap? I believe C extensions, and Buffers, right? If so, how can we debug that. What else should we look for?

like image 239
Julien Genestoux Avatar asked Oct 29 '12 17:10

Julien Genestoux


People also ask

How much memory does Node js use?

In Node < 12 , it sets a limit of 1.5 GB for long-lived objects by default. If this exceeds the memory available to your dyno, Node could allow your application to start paging memory to disk.

How do I check Nodejs memory usage?

memoryUsage() method is an inbuilt method of the process module that provides information about the current processes or runtime of a Node. js program. The memory usage method returns an object describing the memory usage in bytes of the Node.

Does Nodejs have memory leaks?

In simple terms, a Node. js memory leak is an orphan block of memory on the Heap that is no longer used by your app because it has not been released by the garbage collector. It's a useless block of memory. These blocks can grow over time and lead to your app crashing because it runs out of memory.

What is heap memory in Nodejs?

The Memory Heap is divided into two major spaces: Old space: where older objects are stored. Usually, objects are moved here after surviving in a new space for some time. The old space can be controlled by the flag --max-old-space-size. New space: most objects are allocated here.


1 Answers

Without knowing what your app is doing, it is impossible to comment on this.

If the V8 heap usage is significantly lower than the RSS, then yes, it must be external buffers and other memory used by non-V8 objects.

Can you make some code public?

like image 55
isaacs Avatar answered Oct 14 '22 01:10

isaacs