Как я могу узнать, что процессы используют пространство подкачки?

10

У меня есть лучшие отчеты о сервере Linux на 9 ГБ подкачки: Вверх

Но я не могу понять, где он использует своп, в некоторых результатах Google говорится, что верхний Oзапятый pбудет показывать использование свопа процессом. Но, как показано на рисунке выше, взятие краткой суммы столбца SWAP показывает, что используется> 10 ГБ подкачки, так откуда же берется цифра 9 ГБ для использования подкачки?

Топ сообщает, что около 96492 КБ оперативной памяти используется буферами. Что я могу сделать, чтобы использовать это, вместо использования свопа?

secmask
источник
1
top (для страницы man) вычисляет SWAP как виртуальное - физическое использование оперативной памяти. Не совсем точно из моих экспериментов.
Lornix

Ответы:

6

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

Нет необходимости пытаться указать Linux использовать буферную область вместо swap - она ​​уже очень умна в том, что делает. Если вы используете 9 ГБ подкачки и 9 ГБ буфера, это хорошо ... это означает, что Linux понимает, что 9 ГБ загруженного в память материала не используется активно, поэтому более эффективно перенести его на диск, чтобы ваш буфер может увеличиться и улучшить вашу производительность.


РЕДАКТИРОВАТЬ: Если вы сложите всю память, используемую каждым процессом, вы получите гораздо больше, чем ваша физическая память. Это происходит из-за того, что совместно используемые библиотеки используются несколькими программами, а также из-за того, что Linux обрабатывает вилки - он не дублирует всю программу в памяти, он дублирует только части, которые различаются между двумя экземплярами. В некоторых случаях видеопамять может отображаться как часть процесса X - я думаю, что старые карты Voodoo3 делали это. Могут быть и другие случаи, когда «фантомная» память также может отображаться сверху.

Flimzy
источник
Я не думаю, что разделяемые библиотеки должны учитываться как подкачка, потому что при запуске системы не требуется подкачка, но уже загружено много общих библиотек. В любом случае, я вижу, что моя система использует около 9 ГБ раздела подкачки, я просто хочу выяснить, какой процесс использовал большую часть раздела подкачки (
исключая
3

Разбор подкаталога / proc работает:

Как скрипт bash:

for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done

Выходные данные могут быть отсортированы по типу Hi-Lo:

{blah}| sort -rn

Конечно, перепишите это на своем любимом языке недели, как вы хотите. Мой Awk-фу не сильный.

(Вырезать-н-pastable)

#!/bin/bash
#
# show swap used by processes
#
(for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done ) | sort -nr
lornix
источник
1

Альтернативный способ:

smem -s swap -r
Кирилл Феоктистов
источник