процесс kswapd вызывает высокую загрузку ЦП системы

Вопрос или проблема

Я устраняю некоторые проблемы с моим сервером RHEL 5. Это сервер Oracle DB, который работал несколько времени без особых проблем. Последнее время я замечаю, что нагрузка на сервер относительно высокая из-за процессов KSWAPD, вызывающих высокую загрузку ЦП. Проверив, я заметил, что на сервере много активности по свопингу.

Характеристики сервера:

12 x 2 ЦП & 64 ГБ ОЗУ
bash-3.2$ uname -a
Linux 2.6.18-408.el5 #1 SMP Пт Дек 11 14:03:08 EST 2015 x86_64 x86_64 x86_64 GNU/Linux

Когда я смотрю на top, я вижу, что на сервере все еще осталось 10 ГБ свободной физической памяти, и поэтому я не уверен, почему он свопит. Буду признателен, если кто-то подскажет правильное направление для устранения неполадок.

top - 15:31:35 запущен 231 день,  5:22,  2 пользователя,  средняя нагрузка: 13.27, 13.97, 14.12
Задачи: 1443 всего,  12 выполняются, 1431 спят,   0 остановлены,   0 зомби
ЦП: 29.2%us, 17.2%sy,  0.0%ni, 47.5%id,  5.4%wa,  0.0%hi,  0.6%si,  0.0%st
Память:  65839252k всего, 53587688k использовано, 12251564k свободно,   122936k буферов
Своп: 68059128k всего,  4535508k использовано, 63523620k свободно, 45719164k кэшировано

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 9423 oraitxnp  17   0 8403m 167m 166m R 98.7  0.3   0:57.51 oracle
12348 oraitxnp  17   0 8405m 242m 240m R 98.7  0.4   0:39.11 oracle
 8942 oraitxnp  20   0 8404m 174m 171m R 95.6  0.3   1:59.77 oracle
 9049 oraitxnp  25   0 8404m 170m 167m R 95.6  0.3   1:33.17 oracle
 9402 oraitxnp  25   0 8404m 161m 158m R 95.6  0.3   1:24.03 oracle
13280 oraitxnp  17   0 8403m 161m 159m R 95.6  0.3   1:04.59 oracle
13227 oraitxnp  17   0 8403m 165m 162m R 92.4  0.3   0:40.65 oracle
 1431 root      11  -5     0    0    0 R 82.8  0.0   2802:41 kswapd2
11395 oraitxnp  16   0 8403m 192m 191m R 66.9  0.3   0:15.55 oracle

sar -r 
02:20:02 ДП kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
02:30:11 ДП  12860252  52979000     80.47    122888  45721248  63711928   4347200      6.39    853652
02:40:02 ДП  12591216  53248036     80.88    122876  45728156  63467408   4591720      6.75    860892
02:50:01 ДП  12648836  53190416     80.79    122928  45729408  63717800   4341328      6.38    913284
03:00:02 ДП  12489840  53349412     81.03    122932  45727364  63558884   4500244      6.61    941220
03:10:05 ДП  12380352  53458900     81.20    123064  45735548  63541648   4517480      6.64    879124
03:20:12 ДП  12195596  53643656     81.48    123124  45732364  63358440   4700688      6.91    901656
03:30:02 ДП  12425600  53413652     81.13    122936  45718624  63582308   4476820      6.58    964544
Среднее:     12406342  53432910     81.16    121691  45498460  63646323   4412805      6.48    952204

sar -B
02:20:02 ДП  pgpgin/s pgpgout/s   fault/s  majflt/s
02:30:11 ДП  36386.86   4421.45  14369.55   2242.21
02:40:02 ДП  41398.13   5570.15  17610.94   2555.90
02:50:01 ДП  51600.70   4681.47  14093.22   1675.94
03:00:02 ДП  48850.39   5340.96  15636.23   2251.99
03:10:05 ДП  53043.46   4755.90  17506.83   2378.80
03:20:12 ДП  39151.42   5297.79  14383.58   1816.64
03:30:02 ДП  47760.58   5099.56  14774.31   2236.45
Среднее:     47687.94   4831.93  15128.85   2191.29

-bash-3.2$ free -m
             total       used       free     shared    buffers     cached
Память:     64296      52281      12014          0        120      44655
-/+ buffers/cache:       7506      56789
Своп:       66463       4545      61918

Какое значение у вас установлено для vm.swappiness? Значение по умолчанию – 60 (по крайней мере, на Ubuntu). Насколько я понимаю, чем меньше число, тем больше ваша система будет предпочтать ОЗУ перед свопом.

Это, конечно, при условии, что высокая нагрузка на ЦП связана с дисковым свопом. Если я правильно читаю этот вывод, те 8 процессов oraitxnp используют более 8 ГБ виртуальной (ОЗУ) памяти каждый. Это похоже на конкуренцию за физическую память, но я не уверен, как колонки RES и SHR влияют на это.

Я бы выполнил cat /proc/meminfo, чтобы лучше понять, сколько “физической” ОЗУ используется. Трудно сказать по некоторым данным sar, поскольку они смешивают 64 ГБ физической + 66 ГБ свопа, но я бы предположил, что добавление еще 64 ГБ ОЗУ в этот сервер — и, возможно, уменьшение дискового свопа до 8 ГБ или что-то подобное. В идеале, вы никогда не хотите использовать дисковый своп. Если вы это делаете, вам нужно добавить больше физической ОЗУ или потерпеть снижение производительности.

Много лет назад стандартом для свопа в Linux было “просто сделай его вдвое больше, чем ваша ОЗУ”, но это было в то время, когда большинство настольных систем работали всего на 1-2 ГБ. Даже Redhat изменил эту позицию, предлагая, что 20% от физической памяти “обычно хорошая идея.”

Ответ или решение

Процесс kswapd является одной из ключевых подсистем управления памятью в Linux, и его основная задача заключается в управлении своп-файлом и освобождении памяти для активных процессов. Ваша ситуация с высоким использованием процессора из-за kswapd может быть признаком нескольких проблем, связанных с управлением памятью на вашем сервере RHEL 5, который работает с Oracle DB.

Описание проблемы

На вашем сервере RHEL 5 с 64 ГБ ОЗУ зафиксировано значительное использование ресурса CPU процессом kswapd. При этом, несмотря на то, что доступно 10 ГБ физической памяти, наблюдается активное использование свопа и высокая нагрузка на процессора. Это может свидетельствовать о том, что память используется неэффективно, и процесс kswapd вынужден активно участвовать в переноса страниц между ОЗУ и свопом, ухудшая производительность системы.

Анализ текущей ситуации

  1. Общее использование памяти:

    • Вы указали, что у вас 64 ГБ ОЗУ и порядка 5,36 ГБ свободно при использовании 53,58 ГБ. Однако, система при этом продолжает достаточно активно использовать своп, что может быть признаком нехватки физической памяти.
  2. Параметры swappiness:

    • Значение параметра vm.swappiness определяет, как часто операционная система будет использовать своп по сравнению с ОЗУ. Стандартное значение равно 60; для серверов, особенно с большим объемом памяти, возможно стоит установить это значение ниже (например, 10 или 20), что заставит систему предпочитать использовать ОЗУ вместо свопа.
  3. Набор процессов:

    • Как видно из вывода команды top, процессы Oracle становятся главными потребителями ресурсов. Каждому процессу выделяется более 8 ГБ виртуальной памяти, что в сочетании с текущей нагрузкой на kswapd может приводить к колебаниям в использовании памяти, требуя постоянного доступа к свопу даже при наличии свободной физической памяти.
  4. Нагрузка на своп:

    • Вычисления на основе sar показывают значительную активность ввода-вывода – особенно в расчетах по pgpgin и pgpgout, что указывает на частый доступ к свопу. Это подтверждается сообщением о высоком числе операций, ведающих системой: 47 687.94 операций ввода (pgpgin) и 4 831.93 операций вывода (pgpgout) в секунду.

Рекомендации по устранению проблемы

  1. Настройка параметра swappiness:
    Чтобы уменьшить использование свопа и снизить нагрузку на kswapd, измените значение vm.swappiness на значение ниже 60:

    echo 10 > /proc/sys/vm/swappiness

    Это настройка требует минимального перезагрузки и должна оказать влияние на производительность немедленно.

  2. Мониторинг использования памяти:

    • Запустите команду cat /proc/meminfo, чтобы получить более детальную информацию о текущем использовании памяти. Обратите внимание на значения Buffers, Cached и SwapCached, которые могут помочь вам понять, сколько памяти можно освободить без воздействия на производительность.
  3. Добавление оперативной памяти:

    • Если после применения предложенных настроек проблема все еще существует, рассмотрите возможность увеличения объема физической памяти на сервере. Оптимальная конфигурация для Oracle DB требует значительных ресурсов, особенно с увеличением числа запросов.
  4. Устранение утечек памяти:

    • Проверьте, не возникает ли утечек памяти в приложениях, работающих на сервере, через анализ дампов памяти (если возможно) или использование профилей памяти.
  5. Планируйте регулярное обслуживание:

    • Регулярно выполняйте оценку производительности системы, чтобы предотвратить подобные проблемы в будущем. Следите за регулярными отчётами по памяти и свопу, чтобы оптимизировать настройки системы.

Заключение

Проблема с высоким использованием CPU процессом kswapd на вашем сервере RHEL 5 указывает на более глубокие вопросы управления памятью и свопом. Применение указанных рекомендаций может существенно уменьшить нагрузку и улучшить общую производительность вашего Oracle DB сервера. Обязательно продолжайте мониторить состояние системы после внесения изменений.

Оцените материал
Добавить комментарий

Капча загружается...