Как понять использование памяти и среднюю загрузку на сервере Linux

57

Я использую сервер Linux, который имеет 128 ГБ памяти и 24 ядра. Я использую top, чтобы увидеть, сколько он используется. Его вывод вставляется в конце поста. Вот два вопроса:

(1) Я вижу, что каждый из запущенных процессов занимает очень маленький процент памяти (% MEM не более 0,2%, а чаще всего всего 0,0%), но как общая память почти используется, как в четвертой строке вывода ( "Mem: всего 130766620k, использовано 130161072k, свободно 605548k, буферы 919300k")? Суммарный процент использования памяти во всех процессах вряд ли достигнет почти 100%, не так ли?

(2) как понять среднее значение нагрузки в первой строке («среднее значение нагрузки: 14,04, 14,02, 14,00»)?

Спасибо и всего наилучшего!

Редактировать:

Спасибо!

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

Считается ли своп почти таким же, как память? Например, когда объем памяти и раздел подкачки почти одинаковы, если объем памяти почти исчерпан, но подкачка по-прежнему в основном свободна, могу ли я просто просмотреть ее, как если бы использованный процент памяти + раздел подкачки все еще не был высоким, и запустить другой новый процессы?

Как вы оцениваете использование процессора или памяти (или памяти + подкачки) вместе? Вы начинаете беспокоиться, если кто-то из них достигает слишком высоко или оба?

Выход топ :

$ top

 
вверх - 12:45:33 до 19 дней, 23:11, 18 пользователей, средняя загрузка: 14.04, 14.02, 14.00
Задачи: всего 484, 12 запущенных, 472 спящих, 0 остановленных, 0 зомби
ЦП: 36,7% сша, 19,7% sy, 0,0% ni, 43,6% id, 0,0% wa, 0,0% hi, 0,0% si, 0,0% st
Память: всего 130766620k, использовано 130161072k, свободно 605548k, буферы 919300k
Обмен: всего 63111312 КБ, использовано 500556 КБ, 62610756 КБ свободно, кэшировано 124437752 КБ

  PID USER PR NI VIRT RES SHR S% CPU% MEM TIME + КОМАНДА
 6529 Санчес 18 -2 1075 м 219 м 13 м S 100 0,2 13760: 23 MATLAB
13210 Тимоти 18 -2 48336 37 м 1216 R 100 0,0 3: 56,75 абсурд
13888 Тимоти 18 -2 48336 37 м 1204 R 100 0,0 2: 04,89 абсурд
14542 Тимоти 18 -2 48336 37 м 1196 R 100 0,0 1: 08,34 абсурд
14544 тимоти 18 -2 2888 2076 400 R 100 0,0 1: 06,1
 6183 Санчес 18 -2 1133м 195м 13м S 100 0,2 13676: 04 MATLAB
 6795 Санчес 18 -2 1079м 210м 13м S 100 0,2 13734: 26 MATLAB
10178 Тимофей 18 -2 48336 37 м 1204 R 100 0,0 11: 33,93 абсурд 
12438 Тимофей 18 -2 48336 37 м 1216 R 100 0,0 5: 38,17 абсурд
13661 Тимофей 18 -2 48336 37 м 1216 R 100 0,0 2: 44,13 абсурд
14098 Тимофею 18 -2 48336 37 м 1204 R 100 0,0 1: 58,31 абсурд
14335 Тимоти 18 -2 48336 37 м 1196 R 100 0,0 1: 08,93 абсурд
14765 Тимоти 18 -2 48336 37 м 1196 R 99 0,0 0: 32,57 абсурд
13445 Тимофей 18 -2 48336 37 м 1216 R 99 0,0 3: 01,37 абсурд
28990 корень 20 0 0 0 0 S 2 0,0 65: 50,21 pdflush
12141 тим 18 -2 19380 1660 1024 R 1 0,0 0: 04,04 верх
 1240 корень 15 -5 0 0 0 S 0 0.0 16: 07.11 kjournald
 9019 root 20 0 296m 4460 2616 S 0 0,0 82: 19,51 kdm_greet
    1 корень 20 0 4028 728 592 S 0 0,0 0: 03,11 init
    2 root 15 -5 0 0 0 S 0 0.0 0: 00.00 kthreadd
    3 root RT -5 0 0 0 S 0 0.0 0: 01.01 миграция / 0
    4 корень 15 -5 0 0 0 S 0 0,0 0: 08,13 ksoftirqd / 0
    5 root RT -5 0 0 0 S 0 0.0 0: 00.00 сторожевой таймер / 0
    6 корень RT -5 0 0 0 S 0 0,0 17: 27,31 миграция / 1
    7 корень 15 -5 0 0 0 S 0 0,0 0: 01,21 ksoftirqd / 1
    8 root RT -5 0 0 0 S 0 0.0 0: 00.00 сторожевой таймер / 1
    9 root RT -5 0 0 0 S 0 0.0 10: 02.56 миграция / 2
   10 корень 15 -5 0 0 0 S 0 0,0 0: 00,34 ksoftirqd / 2
   11 root RT -5 0 0 0 S 0 0.0 0: 00.00 сторожевой таймер / 2
   12 корень RT -5 0 0 0 S 0 0,0 4: 29,53 миграция / 3
   13 корень 15 -5 0 0 0 S 0 0,0 0: 00,34 ksoftirqd / 3
Тим
источник
2
Смотрите это для хорошего ответа о памяти. serverfault.com/questions/38065/#38074
Zoredache
И этот ответ на быстрое заключение о средней загрузки (или это долго читаемой для деталей).
Николай

Ответы:

56

(1) Я вижу, что каждый из запущенных процессов занимает очень маленький процент памяти (% MEM не более 0,2%, а чаще всего всего 0,0%), но как общая память почти используется, как в четвертой строке вывода ( "Mem: всего 130766620k, использовано 130161072k, свободно 605548k, буферы 919300k")? Суммарный процент использования памяти во всех процессах вряд ли достигнет почти 100%, не так ли?

Чтобы увидеть, сколько памяти вы сейчас используете, запустите free -m. Это обеспечит вывод как:

             общее количество использованных свободных общих буферов в кеше
Mem: 2012 1923 88 0 91 515
- / + буферы / кэш: 1316 695
Обмен: 3153 256 2896

Значение 'used' в верхней строке (1923) почти всегда будет почти соответствовать значению mem в верхней строке (2012). Поскольку Linux любит использовать любую свободную память для кэширования дисковых блоков (515).

Ключевой показатель, используемый для просмотра, - это используемое значение строки буферов / кэша (1316). Это то место, которое ваши приложения используют в настоящее время. Для лучшей производительности это число должно быть меньше вашей общей (2012) памяти. Чтобы предотвратить ошибки нехватки памяти, она должна быть меньше, чем общая память (2012) и пространство подкачки (3153).

Если вы хотите быстро увидеть, сколько свободной памяти, посмотрите на значение свободной строки буфера / кэша (695). Это общий объем памяти (2012) - фактически использованный (1316). (2012 - 1316 = 696, а не 695, это будет просто проблема округления)

(2) как понять среднее значение нагрузки в первой строке («среднее значение нагрузки: 14,04, 14,02, 14,00»)?

Эта статья о средней загрузке использует хорошую аналогию с трафиком и является лучшей из тех, которые я нашел на данный момент: Понимание загрузки процессора Linux - когда вам следует беспокоиться? , В вашем случае, как указали люди:

В многопроцессорной системе нагрузка зависит от количества доступных процессорных ядер. Оценка «100% использования» составляет 1,00 для одноядерной системы, 2,00 для двухъядерного, 4,00 для четырехъядерного и т. Д.

Таким образом, при средней загрузке 14,00 и 24 ядра ваш сервер далеко не перегружен.

Паскаль Тивент
источник
17

Unix-подобные системы, в том числе Linux, предназначены для максимально эффективного использования доступной оперативной памяти. В общих чертах, есть 3 состояния, в которых каждый МБ ОЗУ может находиться:

  1. Свободно
  2. Используется процессом
  3. Используется для буферов

3-е состояние используется только как пустое место и предназначено для переназначения при необходимости, т. Е. Ваша общая доступная память для программ действительно свободна + UsedforBuffers. Таким образом, вы действительно не увидите выделенное для буфера пространство, отображаемое как назначенное для какого-либо конкретного процесса.

Ваш вопрос о средней нагрузке немного интереснее, так как его легко можно неправильно истолковать. Для полной истории см. Эту статью linuxjournal . Лучшее суммирование - прямая цитата из статьи,

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

Это означает, что вы можете думать о своей средней загрузке как (число запущенных процессов) + (число процессов, ожидающих ввода-вывода). Принимая во внимание, что в любой момент времени вы можете иметь число выполняемых процессов $ CORE, я бы сказал, что среднее значение загрузки в 14 довольно низкое.

Скотт Пак
источник
Спасибо! Какой процент используемой памяти (или памяти + подкачки) считается сильно загруженным и лучше не запускать новые процессы? Вы смотрите на память или память + своп? Используемый своп, показанный сверху, соответствует размеру свопа? Что касается средней загрузки процессора, измеряете ли вы фактическую нагрузку как «средняя загрузка / число ядер»? Сколько за это вы считаете сервер загружен? Спасибо и всего наилучшего!
Тим
2
Загрузка это просто показатель. Как правило, загрузка больше чем ядра - это плохо. Как правило, высокий процент используемой памяти - это плохо. Это не двоичное значение, которое вы можете сказать «это хорошо». Если у вас заканчивается ОЗУ, у вас недостаточно ресурсов для запуска большего количества процессов. Если ты не убежишь, у тебя будет много. Это очень сильно зависит от специфики вашей ситуации.
Cian
4

Со sarстраницы руководства :

       Средняя нагрузка рассчитывается как среднее количество работоспособного или 
       запущенных заданий (состояние R) и количество заданий в непрерывном режиме
       сон (состояние D) в течение указанного интервала.

Со uptimeстраницы руководства :

       Средняя загрузка системы - это среднее число процессов, которые либо
       в работоспособном или бесперебойном состоянии. Процесс в работоспособном состоянии
       либо использует ЦП, либо ожидает использования ЦП. Процесс в
       состояние terruptable ожидает некоторый доступ к вводу / выводу, например, ожидание диска.
       Средние значения взяты за три временных интервала. Загрузить средние
       не нормируются на количество процессоров в системе, поэтому нагрузка
       возраст 1 означает, что одна система ЦП загружается все время, пока на 4
       Процессорная система означает, что она простаивает 75% времени.
Деннис Уильямсон
источник
3
  1. Linux уже некоторое время управляет своей памятью таким образом, что делает эту линию topпрактически бесполезной, обычно сохраняя большую часть памяти машины, выделяемой для различных целей, когда это не требуется пользовательскому процессу.
  2. Среднее значение загрузки - это среднее число процессов, запущенных или ожидающих запуска. Как правило, он имеет сильную отрицательную корреляцию с задержкой системы / отзывчивостью, поэтому вы хотите, чтобы она была как можно ниже. Поскольку каждый из ваших процессоров может что-то запускать в любой момент времени, вы, похоже, чувствуете себя неплохо в 14 лет.
хаос
источник
Спасибо! Относительно 1, вы имеете в виду, что некоторые процессы не отображаются сверху, но используют много памяти? Или то, что четвертая строка вывода о памяти («Mem: 130766620k всего, 130161072k использовано, 605548k свободно, 919300k буферов») вводит в заблуждение, я должен посмотреть на сумму процента памяти, используемого всеми процессами, показанными вверху, и в моем случае Я могу безопасно запустить некоторые новые процессы, занимающие память?
Тим
2
Как указывалось в других ответах, среднюю нагрузку следует сравнивать с количеством процессоров, поэтому в 24-ядерных системах 14 не так уж много. Это было бы примерно как 14/24 = 0,58 в одноядерной системе (ну вроде).
Дэвид Z
@Tim: я имею в виду последнее.
хаос