swap files – how to get more swap spaceNOTE: After I wrote this diary entry, the Handbook section on swap files has been brought to my attention. Perhaps that resource will provide you with better information than this entry.
If you’ve already added one swapfile, and want to add more, see also Adding more swapfiles.
What are swap files?FreeBSD, like many operating systems, make use of a concept called virtual memory. This allows the computer to access more memory than physically exists. Disk is used to store those pages of memory which don’t fit into physical memory. These areas of disk are known as swap files.
How much do I have?To see what swap files exist, use either of the following two commands. I’ve seen no difference in the output, but that doesn’t mean much.
su-2.02# swapinfo Device 1K-blocks Used Avail Capacity Type /dev/wd0s1b 256000 9568 246368 4% Interleavedsu-2.02# pstat -s Device 1K-blocks Used Avail Capacity Type /dev/wd0s1b 256000 9568 246368 4% Interleaved
The problem (added on 22 June 2000)You need the vn driver in your kernel. That can be added by following the instructions at the FAQ section on swap files. After writing this article over 19 months ago, it’s time I used it. I’ve been getting the following messages on http://www.freshports.org/ quite often:
/kernel: swap_pager_getswapspace: failed
And I’ve been getting these messages for even longer:
/kernel: pid 35990 (apache), uid 99: exited on signal 11
Here was my swapinfo:
$ swapinfo Device 1K-blocks Used Avail Capacity Type /dev/ad0s1b 70776 53232 17544 75% Interleaved
Creating a new swapfileThis section creates the swapfile. So my first command was:
# dd if=/dev/zero of=/usr4/swapfile bs=15m count=10 10+0 records in 10+0 records out 157286400 bytes transferred in 40.594 secs (3874578 bytes/sec)
Note that the above should have give you a 150Mb file (bs=15m, count=10 or 15Mx10 = 150Mb). Enjoy.
The config fileI added this to /etc/vntab:
/dev/vn0c /usr4/swapfile swap
Starting vnconfigThen I issued the command:
If you get this error:
vnconfig: open: Device not configured
then you didn’t add the vn device to your kernel. You should have read the FAQ section on swap files first.
The resultsNow I have this as swap space:
# swapinfo Device 1K-blocks Used Avail Capacity Type /dev/ad0s1b 70776 63408 7368 90% Interleaved /dev/rvn0c 153472 0 153472 0% Interleaved Total 224248 63408 160840 28%
That looks much better. I’ll leave it for a week or so to see how it goes.
Making sure it works every time…Ahhh, and before I forget, I added that command to /usr/local/etc/rc.d/vnconfig.sh so it runs at startup. The file contains this:
#!/bin/sh /usr/sbin/vnconfig -ae
And I did this to make sure the file is executable:
chmod u+x /usr/local/etc/rc.d/vnconfig.sh
That’s it. Should be fine. But just to be sure the file would run, I did this:
# /usr/local/etc/rc.d/vnconfig.sh vnconfig: VNIOCATTACH: Device busy
Which is to be expected because vnconfig is already running.
Things to watch out forSamuel Blinn wrote in with this little tidbit:
Well, I made a stupid mistake and perhaps you could add my experience to the page so that this won’t happen to others.
I created one swapfile and it was great. But it wasn’t enough. so I created a second swapfile. Unfortunately instead of pointing the second vntab entry to /usr/swap1, I pointed it to /usr/swap0 just like the first vntab entry.
Wow! Every single program started seg faulting and core dumping. sendmail, inittab, and every once in a while, the kernel. I couldn’t figure out wtf was going on. Until like the fourth time I studied vntab I figured out the error of my stupid ways.
I guess that’s what I get trying to compile things on a 486 laptop.
The moral of the story: If you create more than one swap file using this method, make sure your entries in /etc/vntab are unique. Thanks Sam.