FreeBSD 10添加Swap文件

原由

最近在使用Vultr的VPS。这家VPS提供了我喜欢的FreeBSD 10.1。而后直接部署了个人代理程序,开心的进行了yutube的观看。可是好戏不长,发现代理及其不稳定常常OOM,一开始觉得是本身代码的问题,各类跟踪和分析发现没有任何问题,内存消耗很是正常。spa

发现问题

有一天为了调试,以console模式启动,居然也被系统杀掉了。仔细看了下杀掉的缘由是out of swap space,为何是out of swap space呢?难道是swap空间不足,用了swapctl -s去查看了下,swap空间居然是0,我瞬间就无语了。原来该VPS供应商的FreeBSD镜像默认不提供swap空间。操作系统

解决方法-步骤一

中规中矩的照着文档作了一遍设计

cd /
dd if=/dev/zero of=swapfile bs=1024 count=2076672
chmod 0600 swapfile
echo "md0 none	swap sw,file=/swapfile 0 0" >> /etc/fstab
swapon -aq

OK,看起来万事大吉了,让咱们重启下。好了问题来了,当我重启结束后,神奇的发现swap没挂上。好吧,难道不能自动挂载?让我来手动挂载一次吧,结果告诉我md0是只读文件系统没法挂载,这什么状况?代理

解决方法-步骤二

此时此刻个人心里一万头xxx马飞奔而过,难道我作错什么了,又查看了下文档,毫无问题。正在走头无路的时候,忽然在想,若是FreeBSD文档的做者若是这么作成功了,我和他们的差异在何处。调试

再次仔细观察,做者放在了/usr目录下,为何呢?迅速翻出神做<<FreeBSD操做系统设计和实现>>,找到启动过程那一章。code

从该章节中发现,FreeBSD的loader是用只读模式挂载根分区的,而后Kernel接管后会将分区用读写模式从新挂载根分区。那么好了,咱们的md0在根分区仍是只读的模式的时候就被挂载上去了,固然是不可写的。好了问题找到了,怎么解决呢?在看了fstab和mount的文档后,发现有个参数late,就是不理会mount -a的操做请求而是等到mount -l的操做请求发出后才将带有late参数的分区加载上去。而mount -l的执行时机是在Kernel接管系统并从新挂载根分区后。内存

咱们只须要修改/etc/fstab文件,修改md0项文档

md0 none swap sw,file=/swapfile,late 0 0
相关文章
相关标签/搜索