Резкий рост использования свопов без высокой ставки свопа

Резкий рост использования свопов без высокой ставки свопа

Каждую субботу, по неизвестным мне причинам, один из моих серверов испытывает всплеск использования свопа. Это не обязательно проблема, так как свободной памяти достаточно, но я все равно хотел бы понять, что происходит.

В частности, меня озадачивает ситуация, когда swap увеличивается с 2% до 100% использования в течение примерно 20 минут. Однако, когда это происходит, похоже, что скорость swap не увеличивается. На сервере есть раздел swap размером 8 ГБ, поэтому я бы ожидал скорости выгрузки страниц в тысячи страниц в секунду, чтобы заполнить доступное пространство.

Более того, похоже, что в это время не наблюдается никаких скачков в использовании памяти, которые могли бы привести к подкачке сервера.

Может ли кто-нибудь дать объяснение наблюдаемому поведению? Сервер — RHEL 4.8 (старый, я знаю) с ядром 2.6.9. Я включил некоторые выходные данные sar ниже.

Использование свопа увеличивается с 2% до 100% примерно за 20 минут:

$ sar -r -f sa12
....
06:00:01 PM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
06:10:01 PM   4583856  11847032     72.10     79676    319804   8178056    207864      2.48     19816
06:20:01 PM   4720904  11709984     71.27     38840    225108   8178400    207520      2.47     19124
06:30:02 PM   4839160  11591728     70.55      1404    144948   1968152   6417768     76.53   6227068
06:40:02 PM   4827016  11603872     70.62      1640    145484     10232   8375688     99.88   8182968
06:50:02 PM   4836376  11594512     70.57       844    123304        60   8385860    100.00   8193044
07:00:01 PM   4825764  11605124     70.63       920    128108      4516   8381404     99.95   8188680
....

Вот статистика обмена за тот же период.

$ sar -W -f sa12
....
06:00:01 PM  pswpin/s pswpout/s
06:10:01 PM      0.00      0.00
06:20:01 PM      0.00      0.00
06:30:02 PM      0.68      0.00
06:40:02 PM      1.85      0.00
06:50:02 PM      5.07      0.00
07:00:01 PM      8.62      0.00
....

решение1

Интересный факт: использование swap увеличилось с 0 до 8 ГБ... при этом ни одного байта не было записано на диск (sar pswpout/sпоказывает 0). Поэтому я предполагаю, что swap был выделен/зарезервирован, но не потреблен/использован.

Я предполагаю, что ваш сервер использует vm.overcommit_memory=2(читайvm.overcommit_memory документация,vm overcommit-accounting). В этом случае каждый выделенный байт считается использованным. [Я не проверял].

Вы также можете прочитать веткуLinux: Общий объем используемого свопа = объем свопа, используемый процессами + ??.

решение2

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

Узнайте, какие процессы используют подкачку

Если у вас есть приблизительное представление о том, когда начнется подкачка, вы можете настроить cron на запуск этого скрипта примерно в это время.

Связанный контент