我的托管服务器之一是运行 Debian 和 Linux 内核 2.6.32 和 2.6.38 的 Xen 客户机。它已经运行了相当长一段时间(超过一年),但最近我发现有些奇怪。几个月来,分配给缓冲区(磁盘 I/O、网络)的内存部分始终保持为零。
free 的输出如下所示:
total used free shared buffers cached
Mem: 2071148 1775284 295864 0 0 1139388
-/+ buffers/cache: 635896 1435252
Swap: 524280 19508 504772
buffers
无论服务器的使用情况如何,该列始终打印 0(这是一个运行 postfix 和 courier 的相当繁忙的邮件服务器)。
以下是更多信息:
/proc/meminfo
并/proc/slabinfo
输出:http://pastebin.com/raw.php?i=M8wSkj0Satsar -p
(分页/交换)普通日子的输出:http://pastebin.com/VwLdf1L1(这表明几乎不涉及交换)
我也有这种印象,但我无法真正测量它,即系统在读取某些文件(几乎不使用的文件或日志等大文件)时很慢。因此,我想知道这个buffers
内存是否在某种程度上配置错误,以及磁盘吞吐量是否可以增加。
但是,似乎没有 Linux 内核参数来管理该buffers
内存,至少没有像cached
内存中存在的参数那样的参数。或者我可能错过了什么?
这个内存怎么会一直为零?这是我应该担心的事情吗?如果确实可行,我该如何改变这种行为以更好地利用一些 RAM?
更新:内核升级后(我的提供商提供的 2.6.38 定制内核),行为保持不变,缓冲区保持在 0。这种情况持续了一年多,服务器使用率很高(邮件服务器约有 200 名用户)。该服务器一直运行 Debian 6,现在运行 Debian 7,运行顺利。缓冲区内存仍然保持在 0!
答案1
从技术上讲,缓冲区内存不应为 0,除非服务器处于空闲状态且什么也不做。但即便如此,我还是希望使用一些缓冲区。
你说你最近注意到了这一点。服务器最近有什么变化吗?
你交换了一点,这可能会对性能产生不利影响,但这应该与缓冲区无关。性能是另一个问题,缓冲区显示 0 又是另一个问题。
您可以抓取这些输出并将它们粘贴到 pastebin 中吗?
cat /proc/meminfo
cat /proc/slabinfo
mount