Назад | Перейти на главную страницу

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

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

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

(2) как понять среднюю нагрузку в первой строке («средняя нагрузка: 14.04, 14.02, 14.00»)?

Спасибо и привет!

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

Спасибо!

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

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

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

Вывод вершины :

$ топ

 
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) Я вижу, что каждый из запущенных процессов занимает очень небольшой процент памяти (% MEM не более 0,2%, а в большинстве случаев всего 0,0%), но как общая память используется почти как в четвертой строке вывода ( «Mem: всего 130766620k, 130161072k использовано, 605548k свободно, 919300k буферов»)? Сумма использованной памяти в процентах по всем процессам вряд ли достигнет почти 100%, не так ли?

Чтобы узнать, сколько памяти вы используете, запустите 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»)?

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

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

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

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

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

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

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

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

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

Из sar страница руководства:

       The load  average is  calculated as  the average number  of runnable or 
       running  tasks (R state), and the  number  of tasks in  uninterruptible
       sleep (D state) over the specified interval.

Из uptime страница руководства:

       System load averages is the average number of processes that are either
       in a runnable or uninterruptable state.  A process in a runnable  state
       is  either  using the CPU or waiting to use the CPU. A process in unin‐
       terruptable state is waiting for some I/O access, eg waiting for  disk.
       The  averages  are  taken over the three time intervals.  Load averages
       are not normalized for the number of CPUs in a system, so a load  aver‐
       age  of 1 means a single CPU system is loaded all the time while on a 4
       CPU system it means it was idle 75% of the time.
  1. Linux в течение некоторого времени управляет своей памятью таким образом, чтобы эта линия top в основном бесполезен, обычно оставляя большую часть памяти машины выделенной для различных целей, когда это не требуется для пользовательского процесса.
  2. Средняя загрузка - это среднее количество запущенных или ожидающих запуска процессов. Обычно он имеет сильную отрицательную корреляцию с задержкой / быстродействием системы, поэтому вам нужно как можно меньше. Однако, поскольку каждый из ваших процессоров может запускать что-то в любой момент времени, вы, похоже, неплохо справляетесь с 14.

Средняя загрузка - отличная вещь. Он позволяет понять, что происходит за пределами 100% использования, в основном: http://en.wikipedia.org/wiki/Load_%28computing%29