减少内存消耗的一种简单方法是将多个动态创建的目录放在同一个内存盘上。例如,假设第一个内存盘将包含/tmp目录。然后,可以将/var/tmp目录移动到该内存盘上,并在服务器上执行以下命令
# mkdir /nfsroot/tmp/var # chmod 0 /nfsroot/tmp/var # ln -s /tmp/var /nfsroot/var/tmp |
如果您没有本地硬盘驱动器且不通过网络块设备进行交换,另一种减少内存消耗的好方法是在内核编译期间禁用 Swapping to block devices 选项。
如果您的工作站没有足够的内存并且没有本地驱动器,您可能希望通过 NFS 进行交换。您必须注意,执行此操作的代码仍在开发中,并且此方法通常很慢。有关此操作的完整文档,请访问http://www.instmath.rwth-aachen.de/~heine/nfs-swap/。
如果要应用此解决方案,首先要做的是修补您的内核(您需要内核版本 2.2 或更高版本)。首先从上面的 url 下载补丁,然后 cd 到/usr/src/linux。我假设补丁在/usr/src/patch。然后执行以下命令
# cat ../patch | patch -p1 -l -s |
然后从 NFS 服务器导出具有读写权限和 no_root_squash 的目录。设置客户端,以便它们将其挂载在某个位置(例如在/mnt/swap)。应该以小于内核使用的页面大小(即 Intel 架构上的 4 千字节)的 rsize 和 wsize 挂载它,否则您的机器可能会因内存碎片而耗尽内存;有关 rsize 和 wsize 的详细信息,请参阅 nfs 手册页。现在,要创建 20MB 的交换文件,请执行以下命令(应将其放在客户端的初始化脚本中)
# dd if=/dev/zero of=/mnt/swap/swapfile bs=1k count=20480 # mkswap /mnt/swap/swapfile # swapon /mnt/swap/swapfile |
让我们说一下 NFS 交换的缺点:第一个缺点是它通常很慢,除非您有特别快的网卡。其次,这种可能性尚未经过充分测试。最后,这根本不安全:网络上的任何人都可以读取交换的数据。
尽管我个人从未尝试过,但我得到报告说,下面描述的技巧有效,至少对于最近的内核是有效的。
通过网络块设备进行交换的一般原理与通过 NFS 进行交换相同。好处是您不必修补内核。但是,大多数相同的缺点也适用于 NBD 方法。
# dd if=/dev/zero of=/swap/swapfile bs=1k count=20480 # nbd-server NBDclient 1024 /swap/swapfile # mkswap /swap/swapfile |
# swapon /dev/nd0 |
# ln -s /proc/mounts /nfsroot/etc/mtab # touch /nfsroot/proc/mounts |