This is from a fresh boot of the system, except sshd I have not started anything else. ram consumption used to be just 126-200 mb now it has jumped so significantly that I am concerned I might have unnecessarily bloated my system:
I intend to use the system as a local server with an optional fully featured WM(Hyprland which is installed, but this screenshot was taken before it was loaded) for occasional use.
Ram conservation is a top priority and I would like to know if such a big jump in usage is normal or are there is something wrong with my system config
-
You mention this is a server VM and so you probably don’t need NetworkManager or the wpa_supplicant services. If you don’t wish to setup a static IP for the server VM then install and use dhcpcd instead of NetworkManager/wpa_supplicant.
-
Unless you need to use WWAN (2G/3G/4G/5G) devices, you don’t need ModemManager.
-
Depending on your workflow, consider reducing the number of agetty instances to 1. With a single agetty instance, install and use tmux multiplexer when you need more sessions on the physical VM console.
-
I don’t have any experience of using seatd/elogind but I think you may be able to configure USE flags such that you only need seatd installed (i.e. don’t need elogind) and since you need seatd only for running a WM occasionally, why not use seatd-launch to start the WM and not have the seatd daemon running constantly. See: https://github.com/swaywm/sway/wiki/Running-Sway-with-seatd,-elogind-or-systemd‐logind#seatd-launch
-
Lastly, the largest chunk of memory used other than the processes you can see in htop will be the Linux kernel. The Gentoo distribution kernel will have hundreds of drivers for real hardware which make no sense in a Kernel that will be used in a VM (unless you plan to use PCI/USB pass through). So, you should create a custom kernel (https://wiki.gentoo.org/wiki/Kernel/Gentoo_Kernel_Configuration_Guide) which is tailored for a KVM guest.
To do this (the following are not detailed instructions but just guidance):
- You start with “make defconfig” which creates a “.config” file with the default options from the ARCH supplied defconfig (e.g. x86_64_defconfig).
- Then you do a “make kvm_guest.config” which adds config options that makes the kernel bootable as a KVM guest.
- Next you need to do a “make filesystem.config” which will add config options for filesystems you need the kernel to support. (* see note below)
- Next you need to do a “make systemd.config” which will add config options for systemd functionality related support. (* see note below)
- Next you need to do a “make arch_x86.config” which will enable additional config options for some virtual hardware support drivers (* see note below)
Note 1: The additional “*.config” files mentioned above will need to be copied into the correct place before make will find them and I’ve provided some some sample config files you can use to start with below:
- https://github.com/torvalds/linux/blob/master/kernel/configs/kvm_guest.config
- https://github.com/cyano-linux/qemu-guest-kernel/blob/master/filesystem.config
- https://github.com/cyano-linux/qemu-guest-kernel/blob/master/systemd.config
- https://github.com/cyano-linux/qemu-guest-kernel/blob/master/arch_x86.config
Note 2: I’m not associated with the above github repo(cyano-linux/qemu-guest-kernel) but I have referenced it when I needed to setup a custom kernel. You can find a little documentation for the above kernel config here: https://github.com/cyano-linux/qemu-guest-kernel/blob/master/config.md
-
Remove Modemmanager if you don’t use it, replace Network-manager and wpa_supplicant with connman or iwd, maybe look if you can remove elogind since you already use seatd.
Btw, syslogd, the reference implementation? Not syslog-ng?
And, uh, Systemd doesn’t do supervision by itself, needs a service for it?
Are you having performance problems? If not, what do you care?
You can also drop cache for debugging by running something like
echo 3 | sudo tee /proc/sys/vm/drop-caches
But remember that the kernel knows best — this RAM will automatically be freed up when needed and you should never run this except for debugging (or maybe benchmarking).
Rimworld mods sometimes occupy 10gb RAM after a crash/force-close. That one helps.
But don’t set up a cronjob running it regularly, that causes issues.
When you want to turn it on, instead unplug it and go start a farm. Problem solved, requires zero ram
You might be a little surprised at how much compute goes into running a modern farm.
Although you may eventually want a ram
It’s allocated memory in the cache. It’s not used, it’s earmarked for first usage.
This is standard memory management.
free -m
andslabtop
output.I don’t know when you had a clean boot using only 200MB, but it wasn’t in the past few years with what you’re running there.
Anyway, with half your RAM still available, things are more than fine. Make sure you have swap enabled, and you won’t get OOMKill situations that tear things down.
Uh, memory metrics in Linux are a pain. The only tool that reports most cached as available is htop. free, top and a lot of other software (like node_exporter) will report that a lot of cached memory is not available.
To OP: don’t worry, a lot of Linux tools are smart enough to give back memory if memory pressure rises.
Time for the classic https://www.linuxatemyram.com/
Tldr it’s cache, its a GOOD thing and you WANT it to happen. The memory is available if applications need it
The memory is available if applications need it
That’s not true, since it’s reserved memory.
Why do you care so much about memory usage?
Unused RAM is wasted RAM.
It’s apparently jumped by almost a third of all of their available RAM. That’s pretty significant.