Я хотел бы знать, может ли вывод Linux на основе Red Hat по-разному интерпретироваться Linux на основе Debian.
Чтобы сделать вопрос еще более конкретным, я хочу понять, как top
интерпретируется «среднее значение загрузки» из первой строки команды в системе Red-Hat и как это проверить с помощью официальной документации или кода.
[Есть много способов подойти к этому вопросу, каждый из которых является приемлемым ответом на вопрос.]
Один из возможных подходов - найти, где эта информация официально документирована.
Другой вариант top
- найти версию кода, созданную в конкретном дистрибутиве, и версию, над которой я работаю.
Вывод команды, который я получаю:
top - 13:08:34 up 1:19, 2 users, load average: 0.02, 0.00, 0.00
Tasks: 183 total, 1 running, 182 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 96.8%id, 2.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3922520k total, 788956k used, 3133564k free, 120720k buffers
Swap: 2097148k total, 0k used, 2097148k free, 344216k cached
В этом случае, как я могу интерпретировать среднее значение нагрузки ?
Мне удалось обнаружить, что средняя загрузка составляет около последней минуты из одного источника документации и что она должна быть интерпретирована после умножения на 100 из другого источника документации.
Вопрос в том,
загружен ли он на 0,02% или на 2%?
Источники и версии документации:
1) Первая звезда с
TOP(1) Linux User’s Manual TOP(1)
NAME
top - display Linux tasks
Источник: man top
в моем дистрибутиве RedHat
Ubuntu также имеет версию с «заданиями», которая не объясняет среднюю загрузку в:
http://manpages.ubuntu.com/manpages/precise/man1/top.1.html
2) Второй начинается с
TOP(1) User Commands TOP(1)
NAME top
top - display Linux processes
Источник:
http://man7.org/linux/man-pages/man1/top.1.htm
3) Этот начинается с:
TOP(1)
NAME
top - display and update information about the top cpu processes
Источник: http://www.unixtop.org/man.shtml первый один, можно увидеть в или и он не имеет каких - либо объяснений формата вывода (ни о среднем нагрузки , в которой я заинтересован в) , Второй один, не содержит краткое объяснение, указывая на то , что средняя нагрузка связана с последней 1 минуты, но ничего об интерпретации его стоимости!
man top
RHEL
online ubuntu documentation
Я цитирую прямо из второго источника:
2а. UPTIME и LOAD Averages.
Эта часть состоит из одной строки, содержащей: имя
программы или окна, в зависимости от
текущего времени и продолжительности режима отображения с момента последней загрузки
общее количество пользователей
, загруженных системой в среднем за последние 1, 5 и 15 минут
Таким образом, если это объяснение действительно верно, достаточно просто понять, что среднее значение загрузки составляет около 1 минуты.
Но это не объясняет формат числа.
В третьем объяснении говорится, что:
При указании чисел для средних значений нагрузки их следует умножить на 100.
Это объяснение предполагает, что 0,02 означает 2%, а не 0,02%. Но правильно ли это? Кроме того, это правильно для всех дистрибутивов Linux и потенциально различных реализаций top
?
Чтобы найти ответ на этот вопрос, я попытался просмотреть код, выполнив поиск в Интернете. Но я нашел, по крайней мере, две разные версии, top
относящиеся к RHEL! builtin-top.c
и переработан top.c
. Оба защищены авторским правом Red-Hat, как указано в уведомлении в начале кода, и, таким образом, кажется логичным, что RHEL использует один из них.
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c
Итак, прежде чем углубляться в этот большой код, я хотел узнать, на чем сосредоточиться, чтобы сформировать точное понимание того, как интерпретируется загрузка процессора?
Из информации, приведенной в ответах ниже, в дополнение к личному поиску я обнаружил, что:
1 - top
то, что я использую, содержится в пакете procps-3.2.8. Что можно проверить с помощью top -v
.
2 - В версии, procps-3.2.8
которую я скачал с официального сайта, кажется, что инструмент uptime
получает информацию напрямую из procfs
файла /proc/loadavg
(без использования функции linux getloadavg()
).
3 - Теперь для top
команды также не используется функция getloadavg()
. Мне удалось убедиться, что top
он действительно делает то же самое, что иuptime
инструмент, чтобы показать средние нагрузки. На самом деле он вызывает uptime
функцию инструмента, которая получает информацию из procfs
файла /proc/loadavg
.
Итак, все указывает на /proc/loadavg
файл! Таким образом, чтобы сформировать точное понимание load average
созданного top
, нужно прочитать код ядра, чтобы увидеть, как loadavg
записывается файл .
Существует также отличная статья, указанная в одном из ответов, которая предоставляет непрофессиональным терминам объяснение трех значений loadavg
.
Итак, несмотря на то, что все ответы были одинаково полезны и полезны, я отмечу тот, который указал на статью
http://www.linuxjournal.com//article/9001, как «ответ» на мой вопрос. Спасибо всем за ваш вклад!
Кроме того, из вопроса « Понимание верхней и средней нагрузки» я нашел ссылку на исходный код ядра, который указывает на место, где loadavg
рассчитывается. Как кажется, есть огромный комментарий, объясняющий, как это работает, и эта часть кода находится в C
!
Ссылка на код: http://lxr.free-electrons.com/source/kernel/sched/loadavg.c
Опять же, я не пытаюсь участвовать в какой-либо форме плагиата, я просто добавляю это для полноты. Итак, я повторяю, что ссылка на код ядра была найдена из одного из ответов в разделе Понимание вершины и средней нагрузки ...
источник
top -v
)Ответы:
Загрузка ЦП - это длина очереди выполнения, то есть длина очереди процессов, ожидающих запуска.
uptime
Команда может быть использована , чтобы увидеть среднюю длину очереди выполнения за последнюю минуту, последние пять минут и последние 15 минут, так же , как то , что обычно отображаютсяtop
.Высокое значение загрузки означает, что очередь выполнения длинная. Низкое значение означает, что оно короткое. Таким образом, если среднее значение загрузки за одну минуту составляет 0,05, это означает, что в среднем за эту минуту в очереди выполнения было 0,05 процесса, ожидающих запуска. Это не процент. Это, AFAIK, одинаково для всех Unices (хотя некоторые Unices могут не подсчитывать процессы, ожидающие ввода-вывода, что, как я думаю, делает Linux; OpenBSD, только на некоторое время, также подсчитывает потоки ядра, так что загрузка всегда была равна 1 или Больше).
top
Утилита Linux получает значения загрузки от ядра, которое записывает их/proc/loadavg
. Глядя на источникиprocps-3.2.8
, мы видим, что:sprint_uptime()
вызывается функцияtop.c
.proc/whattime.c
и вызовахloadavg()
вproc/sysinfo.c
.LOADAVG_FILE
чтобы прочитать средние значения нагрузки.LOADAVG_FILE
определяется ранее как"/proc/loadavg"
.источник
top
Иuptime
коммунальные услуги не являются POSIX утилит иgetloadavg()
функций библиотеки также не определено в стандарте POSIX (он имеет BSD происхождение , хотя).top
файле procfs loadavg ...Средняя загрузка обычно рассчитывается ядром. Такие приложения, как
top
иuptime
могут использоватьgetloadavg(3)
библиотечный вызов для доступа к нему (он предназначен для переноса между различными версиями Unix). В Linux это обычно приводит к чтению из/proc/loadavg
. На FreeBSD это системный вызов.Например:
uptime
иtop
оба делают одинаковые звонки, чтобы получить свои данные.Теперь средние значения нагрузки 1/5/15 минуты - это количество процессов в очереди выполнения. Различные операционные системы могут рассчитывать это по-разному; обычно самая большая разница заключается в том, считаются ли процессы, ожидающие ввода-вывода (например, заблокированные на диске), работающими или нет. На линуксе они есть.
Таким образом, среднее значение загрузки 3,4 означает, что в очереди выполнения в образце окна было в среднем 3,4 процесса (1, 5, 15 минут).
Однако высокая средняя нагрузка не обязательно означает перегруженный сервер. Если у вас 16 ядер, то ваша средняя нагрузка может быть 16 без стресса. У вас также может быть много обращений к приложениям,
fork()
что может привести к созданию / уничтожению большого количества процессов, что приводит к высокой средней загрузке, но без существенного влияния на производительность сервера. Его следует использовать только в качестве руководства, наряду с другими показателями, такими как% загрузка ЦП.источник
Средняя нагрузка - это не то, что является специфическим для какого-либо конкретного инструмента или распределения, это измерение, предоставляемое ядром или, точнее, планировщиком, поэтому это измерение не зависит от распределения. Измерение записывается внутри файловой системы proc
/proc
Насколько это понятно, показатель средней нагрузки - это не показатель того, насколько интенсивно работает процессор, а объем работы, который необходимо выполнить. Я не думаю, что действительно нужно умножать это на что-либо, потому что это прямое измерение количества процессов в работоспособном или бесперебойном состоянии.
Попробуйте проверить следующие две справочные страницы:
getloadavg(3)
иuptime
для получения дополнительной информации.Поначалу показатель средней нагрузки может быть сложным для понимания, я думаю, что многие люди считают, что это показатель того, насколько интенсивно работает процессор, но это не совсем так.
источник
getloadavg()
описании функции, является той же средней загрузкой,top
которую показывает команда в rhel? Я спрашиваю об этом, потому что я выполнил полнотекстовый поиск в неупакованном содержимом пакета procps-3.2.8 (который указан командойtop -v
), и нет ни одного упоминания о функции getloadavg ()! Так что, возможно, top вычисляет среднее значение нагрузки другим способом ...