Что такое Load Average и какую информацию он несёт для системного адмистратора Linux
На одном из собеседований, которое я проходил в процессе поиска работы, меня спросили про среднюю загрузку или load average. Тогда я не смог ничего ответить, так как не имел ни теории, ни практики по работе с этим понятием. Но оказывается, что это термин, с которым рано или поздно сталкивается любой начинающий системный администратор, поэтому давайте поговорим про то, что это за показатель и почему он важен.
Что такое средняя загрузка?
Мы не будет обращаться к Википедии или учебникам по системному администрированию. Вместо этого я хочу на простом примере объяснить что такое load average.
Независимо от того какой на вашем сервере установлен процессор (мощный или нет, многоядерный или с одним ядром) он в процессе работы выполняет определенный программный код. Если бы на сервере был запущен один процесс, то вопроса распределения нагрузки не стояло, но как понимаете такое вряд ли когда-то возможно. Как в таком случае распределять ресурсы между запущенными процессами? Тут работает принцип, которым мы руководствовались в детстве, когда на одну приставку или компьютер было много желающих поиграть — мы обговаривали время игры, по истечению которого следует смена, например 15 минут на одного желающего.
Также поступает и процессор. Он выделяет тому процессу, которому нужны вычисления, некоторое время в течение которого предоставляет доступ к ресурсам. Это время называется тиком. Процессы при запросе тиков выстраиваются в очередь, при этом имеет значение приоритет процесса, так как если он высок, то процесс будет первым в очереди. Получается, если процесс потребляет много тиков, то значит система находится под нагрузкой. В Linux для того, чтобы оценить нагрузку системы используется интервал в 5 секунд и учитываются как те процессы, которые уже что-то потребляют, так и те, которым не хватило тика, чтобы завершить нужные вычисления. Если процесс за указанные 5 секунд использовал все тики, чтобы выполнить свои вычисления и очередь из процессов не образовалась, то ты говорим про 100%-тную загрузку процессора. По другому, мы можем сказать, что load average равен 1. Сравним это описание с тем, что происходит в магазине — вы берете товар, подходите на кассу и в течение определенного времени (тика) продавец вас обслуживает. В реальной жизни ситуация чуть иная и всегда в магазине есть очередь, кто-то в ней оставляет мужа и продолжает покупки, у кого-то на кассе нет нужной суммы на карте и так далее.
Load average показывает отношение имеющихся запросов на вычислительные ресурсы к количеству этих самых ресурсов (тиков). Для любого одноядерного процессора (будь то Intel последнего поколения или старенький Celeron) использование всех имеющихся ресурсов означает, что load average равен 1. Если количество ядер процессора увеличилось в 2 раза, то увеличилось и количество ресурсов, которые можно предложить процессам для вычислений. В такой ситуации load average равняется 2, а значит и производительность выше, верно? Но, средняя загрузка это не тоже самое, что и производительность, так как оба ядра сделают одинаковое количество тиков. То есть, второе ядро не повысит производительность, но позволит обработать вдвое большее количество запросов (операций).
Надеюсь, что описанное выше позволило вам понять что такое load average и в чем суть этого явления.
Как узнать load average для сервера?
Первым простым способом проверки load average является использование команды uptime , которая покажет общее время активности машины и нужные нам данные.
unixforum.org
Решено:Большой load average (диагностика причины высокого значения Load Average)
Решено:Большой load average
Сообщение Serguei » 01.12.2008 20:07
serg@gs:~$ uname -a Linux gs 2.6.18-6-amd64 #1 SMP Wed Oct 15 10:07:11 UTC 2008 x86_64 GNU/Linux
cpu: Intel® Pentium® Dual CPU E2140 @ 1.60GHz
установлена jdk с сайта http_://java.sun.com/ jdk-6u10-linux-x64.bin
запущена Lineage 2 (4 сервера).
в топе имеем вывод
top - 18:41:18 up 11 days, 35 min, 3 users, load average: 8.07, 11.85, 8.39 Tasks: 98 total, 2 running, 96 sleeping, 0 stopped, 0 zombie Cpu(s): 5.8%us, 6.0%sy, 0.0%ni, 88.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 8176660k total, 6361748k used, 1814912k free, 46912k buffers Swap: 15623172k total, 72k used, 15623100k free, 860040k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 14742 root 19 0 2164m 1.1g 9068 S 15 14.7 170:23.66 java 11532 root 18 0 1995m 1.2g 9068 S 7 15.1 85:37.96 java 12571 root 18 0 1971m 1.0g 9068 S 2 13.1 23:29.67 java 1 root 18 0 6124 680 560 S 0 0.0 0:01.00 init 2 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/0 3 root 34 19 0 0 0 S 0 0.0 0:00.01 ksoftirqd/0 4 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0 5 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/1 6 root 34 19 0 0 0 S 0 0.0 0:00.02 ksoftirqd/1 7 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/1
la в отдельные моменты достигает 60, хотя проц загружен на 10-15%.
подскажите плиз куда рыть и как диагностировать в чем проблема и где узкое место?
процессы под джавой периодически подвисают. раньше линейка работала под виндой и подобных проблем не возникало. после увеличения
RAM до 8 ГБ и перехода на 64 битную Дебиан платформу начались сложности.
спасибо.