free 报告的交换使用量非常高。
[root@rhel6 ~]# free -m
total used free shared buffers cached
Mem: 9892 9537 354 0 71 884
-/+ buffers/cache: 8581 1310
Swap: 767 1759218592 116869
喜欢,真的高的。
[root@bb14 blackboard]# free -g|grep Swap
Swap: 0 1717986906 114
或者是?
[root@bb14 blackboard]# free -h |grep Swap
Swap: 767M 767M 114G
更奇怪的是,即使我禁用交换,这个数字仍然很高。
[root@rhel6 ~]# swapoff -a
[root@rhel6 ~]# free -m
total used free shared buffers cached
Mem: 9892 9760 131 0 45 638
-/+ buffers/cache: 9076 815
Swap: 0 1759218592 116814
当检查 meminfo 时,事情变得更加混乱,它显示 swapfree 高于 swaptotal。
[root@rhel6 ~]# cat /proc/meminfo|grep Swap
SwapCached: 0 kB
SwapTotal: 786428 kB
SwapFree: 120404008 kB
显然有些地方出了问题,我的第一反应是重新启动,但这是一台生产机器,意味着维护窗口等,我想知道是否有任何方法可以找出问题所在,甚至可能在不停机的情况下修复它。
答案1
解决方案是升级到内核-2.6.32-573.7.1.el6或更高。
yum update
只需简单重启即可。
以下是错误报告的引用内核-2.6.32-573.1.1.el6.x86_64导致交换自由量大于交换总量:
get_swap_page() 锁定中的先前更改删除了 swap_lock 自旋锁的使用。这可能会导致 nr_swap_pages 损坏和 /proc/meminfo 文件中的 SwapFree 信息无效,其中 SwapFree 的大小可能超过 SwapTotal 的大小。此更新对 nr_swap_pages 使用原子变量,并且 /proc/meminfo 中的 SwapFree 大小现在正确。(BZ#1259362)
答案2
这看起来是 RHEL6.7 中的一个已知问题,其私人 bugzilla 中正在跟踪 kernel-2.6.32-573.1.1.el6.x86_64。