Linux

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

Я использую сервер на базе linux, который имеет 128 ГБ памяти и 24 ядра. Я использую инструмент top, для определения потребления памяти. У меня есть два вопроса:

  1. Каждый из запущенных процессов имеет очень низкий процент используемой памяти (%MEM не более 0.2%, а большинство всего 0.0%), тогда как, суммарный объем памяти имеет показатели, как в четвертой строке вывода ("Mem: 130766620k total, 130161072k used, 605548k free, 919300k buffers")? В итоге, объем памяти по всем процессам кажется имеет недостоверное значение, достигая почти 100%, не так ли?  
  2. Как понять показатели средних значений нагрузки в первой строке ("load average: 14.04, 14.02, 14.00")?

 

Вывод top:

top - 12:45:33 up 19 days, 23:11, 18 users,  load average: 14.04, 14.02, 14.00

 

Tasks: 484 total,  12 running, 472 sleeping,   0 stopped,   0 zombie

 

Cpu(s): 36.7%us, 19.7%sy,  0.0%ni, 43.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

 

Mem:  130766620k total, 130161072k used,   605548k free,   919300k buffers

 

Swap: 63111312k total,   500556k used, 62610756k free, 124437752k cached

 


 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

 6529 sanchez   18  -2 1075m 219m  13m S  100  0.2  13760:23 MATLAB

13210 timothy   18  -2 48336  37m 1216 R  100  0.0   3:56.75 absurdity

13888 timothy   18  -2 48336  37m 1204 R  100  0.0   2:04.89 absurdity

14542 timothy   18  -2 48336  37m 1196 R  100  0.0   1:08.34 absurdity

14544 timothy   18  -2  2888 2076  400 R  100  0.0   1:06.14 gatherData

 6183 sanchez   18  -2 1133m 195m  13m S  100  0.2  13676:04 MATLAB

 6795 sanchez   18  -2 1079m 210m  13m S  100  0.2  13734:26 MATLAB

10178 timothy   18  -2 48336  37m 1204 R  100  0.0  11:33.93 absurdity 

12438 timothy   18  -2 48336  37m 1216 R  100  0.0   5:38.17 absurdity

13661 timothy   18  -2 48336  37m 1216 R  100  0.0   2:44.13 absurdity

14098 timothy   18  -2 48336  37m 1204 R  100  0.0   1:58.31 absurdity

14335 timothy   18  -2 48336  37m 1196 R  100  0.0   1:08.93 absurdity

14765 timothy   18  -2 48336  37m 1196 R   99  0.0   0:32.57 absurdity

13445 timothy   18  -2 48336  37m 1216 R   99  0.0   3:01.37 absurdity

28990 root      20   0     0    0    0 S    2  0.0  65:50.21 pdflush

12141 tim       18  -2 19380 1660 1024 R    1  0.0   0:04.04 top

 1240 root      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 root      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 migration/0

    4 root      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 watchdog/0

    6 root      RT  -5     0    0    0 S    0  0.0  17:27.31 migration/1

    7 root      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 watchdog/1

    9 root      RT  -5     0    0    0 S    0  0.0  10:02.56 migration/2

   10 root      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 watchdog/2

   12 root      RT  -5     0    0    0 S    0  0.0   4:29.53 migration/3

   13 root      15  -5     0    0    0 S    0  0.0   0:00.34 ksoftirqd/3

 

Ответ 1

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

                   total       used       free     shared    buffers     cached

Mem:          2012       1923         88          0         91        515

-/+ buffers/cache:    1316        695

Swap:          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»)?

Для вашего случая:

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

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

 

Ответ 2

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

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

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

Ваш вопрос о средней нагрузке немного интереснее, так как его легко можно неправильно истолковать. 

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

 

Ответ 3

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

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

Схожие статьи

Linux

Что мешает кому-то установить некоторую запись для моего домена?

Linux

Как узнать максимальное количество потоков на процесс в Linux?

Linux

Как изменить корневой каталог сервера Apache

Linux

Как быстро скопировать большое количество файлов между двумя серверами

×