Linux 缓存内存:超过 85% 的缓存内存并使用交换

Kuf*_*Kuf 4 linux memory cache swap

我在linuxatemyram 上阅读了有关 Linux 和缓存内存的信息,但有一些对我来说没有意义的东西,如果服务器的负载甚至很低,而不是释放一些缓存内存,它开始使用交换,这会使服务器变慢..

即使是现在,当服务器负载达到load average: 0.00, 0.00, 0.00一定程度时,一些内存会被交换,而超过 85% 的内存被用于交换。

我读过类似的问题,例如thisthis,但有人提到不应该发生交换。同样,直到 3 周前,只有一小部分内存被缓存占用,我们没有更改任何可能影响缓存内存的内容。

你能告诉我这个值是否仍然可以,还是我有问题?

谢谢!

[root@web01 ~]# cat  /proc/meminfo
MemTotal:      5183448 kB
MemFree:        249260 kB
Buffers:        330848 kB
Cached:        4317828 kB
SwapCached:         92 kB
Active:        2883596 kB
Inactive:      1882468 kB
HighTotal:     4315324 kB
HighFree:        63516 kB
LowTotal:       868124 kB
LowFree:        185744 kB
SwapTotal:     5799928 kB
SwapFree:      5799796 kB
Dirty:             368 kB
Writeback:           0 kB
AnonPages:      117356 kB
Mapped:          21076 kB
Slab:           152668 kB
PageTables:       4184 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   8391652 kB
Committed_AS:   268708 kB
VmallocTotal:   116728 kB
VmallocUsed:      5404 kB
VmallocChunk:   110964 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:     2048 kB
Run Code Online (Sandbox Code Playgroud)

[root@web01 ~]# free
             total       used       free     shared    buffers     cached
Mem:       5183448    4932936     250512          0     330840    4317340
-/+ buffers/cache:     284756    4898692
Swap:      5799928        132    5799796
Run Code Online (Sandbox Code Playgroud)

[root@web01 ~]# uname -a
Linux web01 2.6.18-164.15.1.el5PAE #1 SMP Wed Mar 17 12:14:29 EDT 2010 i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

Jef*_*and 10

不!在您的示例帖子中,实际上没有任何内容用于交换。您正在使用 92k(或第二个屏幕截图中的 132k)的交换,这是偶然的和微不足道的。

缓存内存是已填充磁盘上块内容的空闲内存。一旦其他任何东西需要空间,它将被腾空。这是提高性能的好东西。

将您的问题与 Server 拒绝使用交换分区进行比较

至于为什么服务器可能会交换数据而不是释放缓存,可能是因为您的缓存数据被读取的次数远多于存储在内存中的数据。程序有时会访问它们很少(如果有的话)访问的页面。缓存可以更好地利用该空间。

vm.swappiness 设置(也可以通过 /proc ... 实时修改)会影响它,但在调整它之前花一些时间仔细查看发生了什么,特别是与您的换入/换出计数器。sar并且atop是有用的工具。