So, when I run top on my machines, I’m starting to see libvirtd using a large amount of memory. I’ve been working through what can be done about that, and found a couple of interesting points.
Firstly, libvirtd is the management tools only. You can restart it without impacting your running virtuals, and therefore part of the answer is to just restart it. There are a number of reports on the web of memory leaks in libvirtd, many of them appear to have been fixed in various versions, I assume there is a leak in the version I’m running, 0.9.12.
Secondly, when I restart it, it kills off my virt-manager sessions. After restarting libvirtd and starting up a new virt-manager, I was finding that my virt-manager was giving a totally blank page on one of my servers. I eventually tracked this to the fact that there was a hung virt-manager running in the background, and new sessions were just connecting to it. Killing that session and then restarting virt-manager fixed my issue.
Firstly, how do you know if you have this problem? I look at the highest apps by resident memory usage on my server using top.
To see this, you run top from the command line. You then press f to pick the fields to sort by, use the up/down keys to get to the field you want to sort (in my case, Res), then press s to sort by it, and q to return to top.
Picking the sort field looks something like this:
Fields Management for window 1:Def, whose current sort field is %CPU Navigate with Up/Dn, Right selects for move then <Enter> or Left commits, 'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end! * PID = Process Id * USER = Effective User Name * PR = Priority * NI = Nice Value * VIRT = Virtual Image (KiB) * RES = Resident Size (KiB) * SHR = Shared Memory (KiB) * S = Process Status * %CPU = CPU Usage * %MEM = Memory Usage (RES) * TIME+ = CPU Time, hundredths * COMMAND = Command Name/Line .....
This should then give you a view something like the following:
top - 11:59:26 up 14 days, 14:10, 8 users, load average: 0.62, 0.73, 0.77 Tasks: 264 total, 4 running, 259 sleeping, 0 stopped, 1 zombie %Cpu(s): 7.5 us, 2.2 sy, 0.0 ni, 89.7 id, 0.4 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem: 8176968 total, 8031272 used, 145696 free, 181900 buffers KiB Swap: 6291432 total, 7264 used, 6284168 free, 3941400 cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6953 libvirt- 20 0 3421m 711m 2480 S 15.3 8.9 3548:00 kvm 6907 libvirt- 20 0 3393m 524m 2468 S 0.3 6.6 63:03.05 kvm 6928 libvirt- 20 0 3431m 457m 2480 S 3.7 5.7 745:01.80 kvm 4334 root 20 0 252m 131m 21m S 2.7 1.6 115:47.04 Xorg 6073 paul 20 0 3060m 104m 32m S 0.3 1.3 2:35.86 plasma-desktop 23420 root 20 0 450m 84m 5392 S 5.0 1.1 32:08.18 libvirtd 23458 paul 20 0 810m 65m 13m S 8.3 0.8 68:04.66 python 6224 paul 39 19 293m 65m 2508 S 0.0 0.8 3:11.45 virtuoso-t
As you can see, in this case my top memory users are three virtual machines running in kvm. I’m using 84m for libvirtd, but this was 40m overnight, so it’s growing by 40-100m per day.
Next, to restart libvirtd you would ideally first shut down all virt-managers, then issue
Start up virt-manager again and check it works. If you get the blank screen, then you can use
Then start up virt-manager again and see if this fixes it.