Я использую сервер на базе linux, который имеет 128 ГБ памяти и 24 ядра. Я использую инструмент top, для определения потребления памяти. У меня есть два вопроса:
- Каждый из запущенных процессов имеет очень низкий процент используемой памяти (%MEM не более 0.2%, а большинство всего 0.0%), тогда как, суммарный объем памяти имеет показатели, как в четвертой строке вывода ("Mem: 130766620k total, 130161072k used, 605548k free, 919300k buffers")? В итоге, объем памяти по всем процессам кажется имеет недостоверное значение, достигая почти 100%, не так ли?
- Как понять показатели средних значений нагрузки в первой строке ("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, предназначены для наиболее эффективного использования доступной оперативной памяти. В общих чертах, каждый МБ ОЗУ может находиться в трех состояниях:
- Свободен
- Используется процессом
- Используется для буферов
Третье состояние используется только, как рабочее пространство и предназначено для переназначения при необходимости, т.е. ваша общая доступная память для программ свободна + используется для буферов. Таким образом, вы не увидите, что выделенное буферное пространство отображается как назначенное какому-либо конкретному процессу.
Ваш вопрос о средней нагрузке немного интереснее, так как его легко можно неправильно истолковать.
Это означает, что вы можете считать среднюю нагрузку следующим образом: (количество запущенных процессов)+(количество процессов, ожидающих ввода-вывода). Учитывая, что в любой момент времени у вас может быть $CORE количество выполняемых процессов, я бы сказал, что ваша средняя нагрузка в 14 довольно низкая.
Ответ 3
Linux в течение определенного времени управляет своей памятью таким образом, что информация top является практически бесполезной, обычно оставляя большую часть памяти машины выделенной для различных целей, когда это не требуется для пользовательских процессов.
Средняя загрузка - это среднее количество запущенных или ожидающих запуска процессов. Обычно она имеет сильную отрицательную корреляцию с задержкой/отзывчивостью системы, поэтому необходимо, чтобы она был как можно ниже. Поскольку каждый из ваших процессоров может быть занят чем-то в любой момент времени, похоже, ваш сервер вполне справляется.
Linux