| 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`:
|