我使用基于 OS 版本 FreeBSD 8.2-RELEASE-p6 构建的 FreeNAS 服务器。我在安装了 8GB 物理内存的机器上使用带有 13TB HDD 的 ZFS 文件系统。它在处理某些请求时几乎使用了所有已安装的内存。但是,它在空闲时间仍使用相同数量的内存。所以这有时会成为一个问题。
在我的 centos 网络服务器上;我使用以下命令通过 cronjob 删除缓存内存;
sync; echo 3 > /proc/sys/vm/drop_caches
但是,此命令在我的 Freenas 服务器上不起作用。我该如何在基于 FreeBSD 8.2 构建的 FreeNAS 机上删除缓存内存
谢谢
答案1
首先,CentOS 是一个 Linux 操作系统。Linux 与 FreeBSD 完全不同。
您确实不需要释放缓存的内存,可能您不需要在 Cent 机器上这样做,但这确实有点取决于您在其上运行的内容。只有当您有非常具体和充分的理由时,您才应该乱搞内存管理。
您希望在生产环境中执行此操作的唯一原因是,如果您的应用程序根据可用内存量来确定自己的内存使用量。我不知道有任何 *nix 程序可以这样做,但可能确实有。即使如此,您也应该对系统缓存使用智能内存限制,而不是手动或定期刷新它们。
清除缓存的唯一其他常见原因是出于基准测试和测试目的。
如果以上两种情况之一不适用,请不要清除缓存。
更新:
除了下面的评论之外,让我通过一个简单的测试来强调性能差异。
dd if=/dev/zero of=/path/to/test.1g bs=1m count=1024
1073741824 字节传输用时 20.998713 秒(51133697 字节/秒)dd if=/path/to/test.1g of=/dev/null bs=1m
1073741824 字节传输进来4.496601 秒(238789654 字节/秒)dd if=/path/to/test.1g of=/dev/null bs=1m
1073741824 字节传输进来1.071374 秒(1002210138 字节/秒)
第一次读取测试文件时没有缓存任何内容;第二次它已经在缓存中了,因此读取操作完成速度快了四倍。在典型的服务器中,90% 的读取都是针对磁盘上 1% 的文件/数据。如果这 1% 中的大部分可以保留在缓存内存中,则磁盘读取速度通常会快 4 倍(至少在我的服务器上)。
答案2
对于那些由于测试原因需要删除缓存的用户,似乎在 FreeBSD 中没有直接删除缓存的方法。
通常os cache是文件系统文件(或mmap
ed文件)的缓存,可以通过卸载相应分区来清除这些文件的缓存。
来源:http://unix.derkeiler.com/Mailing-Lists/FreeBSD/hackers/2010-03/msg00244.html
答案3
只是为了澄清卸载解决方案:尝试卸载文件系统会刷新并清除该文件系统的缓存,即使卸载本身确实不是必须要成功。
cd /mnt
umount /mnt
意志umount
失败因为当前工作目录让它保持忙碌,但任何缓存的数据/mnt
无论如何清除。
例子:
root:/usr/home/user> dd if=test of=/dev/null bs=1048576 count=1000
1048576000 bytes transferred in 10.012924 secs (104722255 bytes/sec)
root:/usr/home/user> dd if=test of=/dev/null bs=1048576 count=1000
1048576000 bytes transferred in 0.290137 secs (3614071699 bytes/sec)
root:/usr/home/user> umount /usr
umount: unmount of /usr failed: Device busy
root:/usr/home/user> dd if=test of=/dev/null bs=1048576 count=1000
1048576000 bytes transferred in 10.149973 secs (103308253 bytes/sec)