Кешируемая память Linux: более 85% кешируемой памяти и использование подкачки

Я читал о Linux и Cachd-памяти на http://www.linuxatemyram.com/, но есть кое-что, что не имеет смысла для меня, если сервер имеет даже низкую нагрузку, вместо освобождения некоторой кэшированной памяти он начинает использовать swap, что замедляет работу сервера..

Даже сейчас, когда нагрузка на сервер 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

2 ответа

Решение

Нет! В вашем примере поста фактически ничего не используется для обмена. Вы используете 92k (или 132k на втором скриншоте) свопа, который является случайным и тривиальным.

Кэшируемая память - это свободная память, которая была заполнена содержимым блоков на диске. Он будет освобожден, как только пространство понадобится чему-то еще. Это хорошая вещь, которая повышает производительность.

Сравните ваш вопрос с сервером, который отказывается использовать раздел подкачки.

Что касается того, почему сервер может обмениваться данными вместо освобождения кэша, это может быть случай, когда ваши кэшированные данные читаются гораздо больше, чем ваши данные, хранящиеся в памяти. Программы иногда имеют страницы, которые они редко, если вообще посещают. Это пространство лучше использовать для кэширования.

Настройка vm.swappiness (также изменяемая в прямом эфире через / proc...) повлияет на это, но потратьте некоторое время на то, чтобы внимательно посмотреть, что происходит, прежде чем настраивать ее, особенно с помощью счетчиков подкачки / выгрузки. sar а также atop полезные инструменты для этого.

Попробуй добавить vm.swappiness = 0 в /etc/sysctl.conf и беги sysctl -p затем это даст команду ядру более агрессивно высвобождать память, занятую файловым кешем, если пользовательскому приложению требуется область памяти от ядра.

Другие вопросы по тегам