在 Centos 6.3 上,为什么几种交换测量方法返回不同的结果?

在 Centos 6.3 上,为什么几种交换测量方法返回不同的结果?

我有一个运行 centos 6.3 的生产系统,配有 96 Gb RAM 和 2 Gb 交换空间。目的是让机器上有足够的 RAM,这样就不会交换任何进程。

根据 /proc/meminfo SwapTotal 和 SwapFree 的报告,在过去一周左右,使用的交换空间量已增加到 100%。

但是,top 和此处给出的脚本报告的进程使用的交换空间量https://stackoverflow.com/questions/479953/how-to-find-out-which-processes-are-swapping-in-linux仅为约26 Mb。

系统似乎没有进行交换,所以我不确定如何认真对待 /proc/meminfo SwapFree 值。

为什么 /proc/meminfo 报告的内容和每个进程的 Swap 之间存在这种差异?

我如何才能找出哪些进程负责 /proc/meminfo 认为所有的交换都已被使用(除了依次终止每个进程并查看 SwapFree 何时增加,但这在生产系统上并不是一个好主意)?

更新:这是免费的当前输出:

             total       used       free     shared    buffers     cached
Mem:      99052152   98330684     721468          0     577400   82224692
-/+ buffers/cache:   15528592   83523560
Swap:      2097144     959580    1137564

和 cat /proc/meminfo:

MemTotal:       99052152 kB
MemFree:          731560 kB
Buffers:          577400 kB
Cached:         82222116 kB
SwapCached:       174456 kB
Active:         69762456 kB
Inactive:       25778300 kB
Active(anon):   53783608 kB
Inactive(anon):  8973048 kB
Active(file):   15978848 kB
Inactive(file): 16805252 kB
Unevictable:       31424 kB
Mlocked:           31424 kB
SwapTotal:       2097144 kB
SwapFree:        1137556 kB
Dirty:              2076 kB
Writeback:             0 kB
AnonPages:      12598632 kB
Mapped:         43958780 kB
Shmem:          50010060 kB
Slab:            1390148 kB
SReclaimable:    1308692 kB
SUnreclaim:        81456 kB
KernelStack:        6400 kB
PageTables:       171412 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    51623220 kB
Committed_AS:   68521168 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      478428 kB
VmallocChunk:   34307842136 kB
HardwareCorrupted:     0 kB
AnonHugePages:  11145216 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:        5604 kB
DirectMap2M:     2078720 kB
DirectMap1G:    98566144 kB

记录的总交换使用量/proc/*/status VmSwap为 11832 Kb。(计算方式awk '/^VmSwap/ {t+=$2} END {print t" kB"}' /proc/*/status

答案1

不会在每个进程中出现的已使用交换的一个来源是 SwapCached 页面。

SwapCached: 174456 kB行是交换空间和内存中的页面。

当页面被发送到交换区然后再次需要但从未被修改时,就会发生这种情况。磁盘上的副本仍然有效,因此被保留。实际上它可以稍后再次交换到磁盘,而不会导致写入磁盘。

相关内容