我阅读了有关 Linux 和 cahd 内存的文章linuxatemyram但有些事情对我来说没有意义,如果服务器的负载很低,它不会释放一些缓存内存,而是开始使用交换,这会使服务器变慢。
即使现在,当服务器负载很大时,load average: 0.00, 0.00, 0.00
一些内存会被交换,而超过 85% 的内存会被用于交换。
我读过类似的问题,例如这和这,但提到不应发生交换。另外,直到 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
[root@web01 ~]# free
total used free shared buffers cached
Mem: 5183448 4932936 250512 0 330840 4317340
-/+ buffers/cache: 284756 4898692
Swap: 5799928 132 5799796
[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
答案1
不!在您的示例帖子中,实际上没有使用任何交换空间。您使用了 92k(或第二张屏幕截图中的 132k)的交换空间,这是偶然的和微不足道的。
缓存内存是已用磁盘块内容填充的空闲内存。一旦其他内容需要该空间,就会将其清空。这是提高性能的好事。
将您的问题与 服务器拒绝使用交换分区。
至于服务器为何会交换数据而不是释放缓存,可能是因为读取缓存数据的次数比存储在内存中的数据要多得多。程序有时会有一些很少访问的页面。缓存可以更好地利用这些空间。
vm.swappiness 设置(也可通过 /proc 实时修改...)将影响这一点,但在调整之前,请花一些时间仔细观察发生的情况,尤其是使用交换入/出计数器。sar
并且atop
是实现此目的的有用工具。
答案2
然后尝试添加vm.swappiness = 0
并/etc/sysctl.conf
运行sysctl -p
,如果用户应用程序需要内核的内存区域,这将指示内核更积极地释放文件缓存占用的内存。