28

У меня есть сервер Ubuntu 8.04, на котором работает база данных, и несколько серверов приложений Java. Его конфигурация и использование памяти:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

Я заметил, что своп повышается каждый день и выпускается ночью. Спрос не одинаков во все дни и начинается в разное время. Так что это довольно случайно, за исключением нечеткой границы «день-ночь».

Нагрузка на эту машину меняется в течение дня. Это очень низкое значение с полуночи до 6-7 часов утра, намного выше (но стабильно) до 6-8 часов вечера, затем постепенно снижается.

Теперь у меня есть следующие вопросы:

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

4 ответа4

25

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

Вы можете получить представление о том, сколько памяти разных типов использует каждый процесс в top или htop . Ни один из них не показывает использование свопа по умолчанию, но оба могут быть настроены на (сверху: нажмите f и включите столбец SWAP ; htop: нажмите F2, добавьте столбец NSWAP ). Вы можете получить дополнительную информацию о конкретном процессе с помощью cat /proc/12345/vmstat где 12345 - это идентификатор процесса. Обратите внимание, что «сколько подкачки использует программа» не полностью определено, так как некоторые страницы совместно используются несколькими процессами.

Существует два основных типа конкурентов для оперативной памяти: память процесса (которая может быть выгружена) и дисковые кэши (которые можно перечитать из файла). Нет причин всегда отдавать предпочтение памяти процесса над дисковым кешем: лучше поменять редко используемую часть памяти процесса, чем снова и снова читать файл в память. Цифры, которые вы даете, с примерно половиной (скажем, 30–70%) памяти, предназначенной для дискового кэша, типичны для систем, которые имеют достаточный объем ОЗУ для задач, которые они должны выполнять.

0

Без опроса и анализа результатов работы инструментов, таких как vmstat , free и top , лучше всего искать crontabs пользователя root или других пользователей в системе. Если общая нагрузка на систему резко возрастает в определенное время, есть вероятность, что в cron существует процесс, который создает потребность в ресурсах. В противном случае вы всегда можете создать утилиту одноразового ведения журнала гетто с помощью утилиты script , которая просто записывает все, что идет в STDOUT.

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

script /tmp/free.txt

а потом

while (true); do date; free; sleep 30; done

и в другом терминале

script /tmp/top.txt

а потом

while (true); do date; top -n 1; sleep 30; done

а затем на следующее утро убейте оба вызова script и сопоставьте выходные данные top и free

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

Вы также можете прочитать руководство по обмену Ubuntu

0

С htop v1.01 я нажал "S", чтобы добавить столбец NSWAP вместо "F2" (как предложил Жиль), затем « Columns > « Available Columns и F5 чтобы добавить его.

0

На StackOverflow уже есть отличный ответ на ваш первый вопрос («Какой процесс на самом деле использует своп?«).

https://stackoverflow.com/a/7180078/1442301

Короче говоря, такие инструменты, как top или htop , не дают точной информации об использовании подкачки. Вы должны погрузиться в папку /proc (в псевдо-файле /proc/$PID/smaps), чтобы получить более точную информацию.

Пост, упомянутый выше, содержит короткий сценарий оболочки, чтобы эта информация была хорошо отражена.

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