Title: Some explanations about OpenBSD memory usage | |
Author: Solène | |
Date: 11 August 2023 | |
Tags: openbsd | |
Description: | |
# Introduction | |
I regularly see people reporting high memory usage on OpenBSD when | |
looking at some monitoring program output. | |
Those programs may be not reporting what you think. The memory usage | |
can be accounted in different ways. | |
Most of the time, the file system cache stored in-memory is added to | |
memory usage, which lead to think about a high memory consumption. | |
# How to figure the real memory usage? | |
Here are a few methods to gather the used memory. | |
## Using ps | |
You can actually use `ps` and sum the RSS column and display it as | |
megabytes: | |
``` | |
ps auwxx | awk '{ sum+=$6 } END { print sum/1024 }' | |
``` | |
You could use the 5th column if you want to sum the virtual memory, | |
which can be way higher than your system memory (hence why it's called | |
virtual). | |
## Using top | |
When running `top` in interactive mode, you can find a memory line at | |
the top of the output, like this: | |
``` | |
Memory: Real: 244M/733M act/tot Free: 234M Cache: 193M Swap: 158M/752M | |
``` | |
This means there are 244 MB of memory currently in use, and 158 MB in | |
the swap file. | |
The cache column displays how much file system data you have cached in | |
memory, this is extremely useful because every time you open a program, | |
this would avoid seeking it on the storage media if it's already in the | |
memory cache, which is way faster. This memory is freed when needed if | |
there are not enough free memory available. | |
The "free" column only tell you that this ram is completely unused. | |
The number 733M indicates the total real memory, which includes memory | |
in use that could be freed if required, however if someone find a | |
clearer explanation, I'd be happy to read it. | |
## Using systat | |
The command `systat` is OpenBSD specific, often overlooked but very | |
powerful, it has many displays you can switch to using left/right | |
arrows, each aspect of the system has its own display. | |
The default display has a "memory totals in (KB)" area about your real, | |
free or virtual memory. | |
# Going further | |
Inside the kernel, the memory naming is different, and there are extra | |
categories. You can find them in the kernel file `sys/uvm/uvmexp.h`: | |
GitHub page for sys/uvm/uvmexp.h lines 56 to 62 | |
# Conclusion | |
When one looks at OpenBSD memory usage, it's better to understand the | |
various field before reporting a wrong amount, or that OpenBSD uses too | |
much memory. But we have to admit the documentation explaining each | |
field is quite lacking. |