Я использую 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 состояниях:
Третье состояние используется только как рабочее пространство и предназначено для переназначения при необходимости, то есть ваша общая доступная память для программ действительно 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.
top
в основном бесполезен, обычно оставляя большую часть памяти машины выделенной для различных целей, когда это не требуется для пользовательского процесса.Средняя загрузка - отличная вещь. Он позволяет понять, что происходит за пределами 100% использования, в основном: http://en.wikipedia.org/wiki/Load_%28computing%29