2

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

Я заинтересован в выяснении, какие программы на моей машине используют swap и сколько каждая из них использует. Я понимаю, что это, вероятно, можно сделать с помощью top, но мне сложно понять, как это сделать.

Что я пробовал:

  1. Начать сверху
  2. Нажмите f (добавить столбец)
  3. Нажмите p (своп колум)

Это добавляет столбец SWAP, но данные кажутся неверными. В верхних списках Firefox используется 582 метра подкачки, но заголовок одновременно сообщает, что используется 0к подкачки.

Я делаю что-то неправильно? Есть ли лучший способ контролировать использование подкачки?

2 ответа2

1

Следует обратить внимание на две колонки: VIRT и RES. VIRT сообщает вам, сколько памяти было зарезервировано для процесса. Это не обязательно означает, что оно выделено или используется, но просто доступно, если процесс запросит его. Другой, на который стоит обратить внимание, это RES, который сообщает вам объем пространства в резидентной памяти. Вот сколько он на самом деле использует. Столбец SWAP просто VIRT минус RES.

Из того, что я немного искал, похоже, что показ свопа в использовании невозможен.

0

К сожалению, не все так просто.

"swap" действительно считается "нерезидентной анонимной страницей". То есть страницы, которые не поддерживаются никаким дисковым файлом (не страницы, поддерживаемые mmap-файлами).

Когда ядру не хватает памяти, оно имеет тенденцию отбрасывать страницы, которые не использовались в последнее время. Может быть выбрано удаление страниц с файловой поддержкой или анонимных страниц. Если это последнее, то используется "своп".

Тем не менее, нет ни одного процесса, который запускает его, это просто общее давление памяти.

Более того, вы даже не можете измерить использование страницы очень точно. Есть два счета на процесс, которые (неопределенно) полезны. Это VSIZE (или размер vm), который представляет собой общее количество страниц, выделенных процессом, но это, как правило, является завышенной оценкой того, сколько фактически "используется", так как он может считать страницы дважды и считать страницы не используется вообще (отображается, но не используется).

Другой - RSS, или "размер резидентного набора", который представляет собой объем памяти на страницах, которые в настоящее время являются резидентными. Однако это не совсем верная картина:

  • Одна и та же страница не обязательно используется ровно одним процессом - ими можно поделиться.
  • Некоторые страницы используются ядром внутри и, следовательно, не оплачиваются ни одному процессу

Мне неизвестны какие-либо инструменты, которые пытаются сделать лучшую оценку, чем эта, но теоретически возможно сделать немного лучше с новой диагностикой, доступной в /proc в недавних ядрах.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .