97

Recently, tomcat process on my Linux machine was killed abruptly. After investigation I found below error message in /var/log/messages file:

kernel: [1799319.246494] Out of memory: Kill process 28536 (java) score 673 or sacrifice childSep 
kernel: [1799319.246506] Killed process 28536 (java) total-vm:1271568kB, anon-rss:426528kB, file-rss:0kB

Now, can someone please tell me that what all is included in total-vm and how is anon-rss different from rss?

Jonathan
  • 20,053
  • 6
  • 63
  • 70
UW20989
  • 1,157
  • 2
  • 8
  • 9
  • 2
    The answer in [the other question](http://stackoverflow.com/questions/9199731/understanding-the-linux-oom-killers-logs) does not explain `anon-rss` or `file-rss`. – Flimm Oct 23 '13 at 11:53

1 Answers1

161

As I understand, the size of the virtual memory that a process uses is listed as "total-vm". Part of it is really mapped into the RAM itself (allocated and used). This is "RSS".

Part of the RSS is allocated in real memory blocks (other than mapped into a file or device). This is anonymous memory ("anon-rss") and there is also RSS memory blocks that are mapped into devices and files ("file-rss").

So, if you open a huge file in vim, the file-rss would be high, on the other side, if you malloc() a lot of memory and really use it, your anon-rss would be high also.

On the other side, if you allocate a lot of space (with malloc()), but nevers use it, the total-vm would be higher, but no real memory would be used (due to the memory overcommit), so, the rss values would be low.

slm
  • 15,396
  • 12
  • 109
  • 124
Breno Leitão
  • 3,487
  • 2
  • 19
  • 23