Fixing Xen Error:(12,‘Cannot allocate memory’)

I don’t know why this hasn’t already been posted all over the interwebs,so I thought I’d post it here. It’s amazing how some of the simplest answers never seem to make it into prominence in the Google search rankings.

Anyway,after cloning a VM today in Xen,I tried to start the DomU,and got this error:

Error:(12,'Cannot allocate memory')

I assumed it had something to do with my Dom0 memory cache consuming nearly every last bit of free memory on my system,so I ran this to clear the cache:

echo 3 > /proc/sys/vm/drop_caches

I confirmed that that “free”reported that the cached memory dropped near zero. Great! Except it didn’t help. I then ran “xm info”to check the memory usage in Xen

total_memory :16378
free_memory :2

Odd. I checked the Dom0 status to see what’s up,and sure enough,my memory allocation on Dom0 is way high.

xm list Domain-0
Name ID Mem VCPUs State Time(s)
Domain-0 0 10482 4 r—–3273110.4

But I still didn’t know how to shrink it. I knew it had something to do with memory ballooning. I also knew you could set the memory allocation of a DomU with “xm mem-set”,but I didn’t know anything about how to do it with the Dom0. A quick IRC message to my Xen guru,Jima,and I get this simple command (obvious really) in response:

xm mem-set Domain-0 512

This balloons the Dom0 host system (as well as any domain,really) memory usage down to 512MB. In my case,my Dom0 claimed to be using about 2 Gig already,so I ballooned down to 4G instead. Not sure if that was just due to some bad math or assumptions on my part,as I never run anything of significance in Dom0. After you run this,you should be able to start your DomU just fine.

Leave a Reply