Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: choko в Oct 04, 2006, 19:26



Титла: Top и load average
Публикувано от: choko в Oct 04, 2006, 19:26
Здравейте !
Моля за помощ при разтълкуването на load average:
какво значат трите колонки със цифри при команда top:

load average: 2.59, 2.85, 3.03


Титла: Top и load average
Публикувано от: gat3way в Oct 04, 2006, 20:36
Накратко трите числа показват колко процеса са стояли в опашката чакащи за процесорно време средно в последната 1/5/15 минути. Стойности над 1 индикират по принцип че нещата не са особено нормални, въпреки че обикновено нещата са доста по-сложни :)

За да се отговори по-нашироко трябва да се засегнат теми като "състояние" на процесите, task scheduling, user/system/irq/iowait time и т.н.


Титла: Top и load average
Публикувано от: choko в Oct 04, 2006, 21:14
Благодаря ти много !
Но можеш ли да ми кажеш колко би трябвало да са нормалните стойности при 2 процесорна и при 8 процесорна машина????


Титла: Top и load average
Публикувано от: gat3way в Oct 04, 2006, 22:03
Няма "нормални" стойности. А и няма значение дали е на 2,4,8,64 процесорна машина - обикновено машините с повече процесори вършат повече работа :) За мене лично стойности над 1 са обезпокоителни и почвам да се ровя да видя какъв е проблема. Ако по принцип loadavg ти е 0.3 да речем и изведнъж скочи над 1 и стои така над 15 минути значи очевидно нещо не е наред. За жалост диагностицирането на проблема не винаги е тривиално.


Титла: Top и load average
Публикувано от: CTEHATA в Oct 04, 2006, 22:51
Цитат на: choko,Окт. 04 2006,20:26
Трите числа са "Load average" за последните 1,5 и 15 минути.
Можеш да си представиш "Load average" като броя процесори, които биха стигнали за да може всяка "running" задача да си има свой процесор и да не се изчакват.
Т.е. общо взето, когато Л.А. ти е по-малко от броя процесори, нямаш сериозен проблем. На практика е мааалко по-сложно. Конкретно в пестнатия случай, имало е някакво натоварване, но то "отминава", защото по-старите стойности са по-големи. Без да се знаят броя процесори и конкретния случай, не може да се каже нищо повече.
  Като цяло, ако 15 минутната стойност винаги е над броя процесори, трябва да се търси корена на проблема.
  Ако си пуснал сериозна задача - компресиране например, нормално е Л.А. да се задържи висок.


Титла: Top и load average
Публикувано от: gat3way в Oct 04, 2006, 23:30
Все пак съветвам ама МНОГО съветвам да не се доверяваш на loadavg по отношение на това доколко реално е натоварена една система. Нещата обикновено са много по-сложни от това. Това най-просто се илюстрира ако си напишеш една програма реализираща безкраен цикъл
примерно така:

void main() {for (;;) {} }

и я пускаш. След малко loadavg ще стане 1 (+досегашния). Пускаш я в още една конзола, увеличава се с още 1. И т.н. Можеш да я пуснеш в още 5 конзоли, при което общата производителност няма да спадне много - пак ще си правиш каквото си правиш без да го усетиш много.

Това е защото няма почти никакво натоварване върху паметта, вход/изход системата, мрежата и т.н. Task scheduler-a ще си прави без проблеми context switch-овете там.

От друга страна, откакто замениха linuxthreads с NPTL, един процес може да има хиляди нишки, всички извършващи някаква дейност, понякога тежко товарещи системата. Всички те се водят един процес, т.е и 20000 нишки да са, няма да вдигнат loadavg с повече от 1 (но пък честно казано не съм проверявал)

loadavg стойност над броя процесори може да е индикация за много неща, не определено за това че капацитетът на процесорите е изчерпан. Може да е въпрос на бавен достъп до дисковете, а да има много процеси които се бият за достъп до тях. На пренатоварена мрежов интерфейс, който вдига прекъсване всеки път като получи етернет фрейм и така не оставят процесорно време за потребителските процеси. Повечето от тези неща трудно ще ги разбереш със top, но sar от друга страна помага :) Виждал съм loadavg от над 200 на машина, маунт-нала отдалечена самба директория като локална файлова система (при нарушена свързаност с машината). От отдалечената самба се изпълняват байнърита през крон-а всяка минута. За няколко часа нещата стават....loadavg над 200. И такам.

top има хубави възможности въпреки всичко. Може да покаже и нишките на процеса както и на кой процесор се изпълняват. Може да покаже на коя функция процесът "спи". И т.н.





Титла: Top и load average
Публикувано от: 0FF1 в Oct 05, 2006, 01:44
Ако искаш някакъв реален поглед за натоварването на системаат .. използвай mrtg и nmap или някакъв bash script да ти начертае едни графики и това e ;)


Титла: Top и load average
Публикувано от: choko в Oct 05, 2006, 16:32
Благодаря на Всички отговорили ;)
Достатъчна информация ;)


Титла: Top и load average
Публикувано от: astronom в Oct 05, 2006, 17:12
Цитат (gat3way @ Окт. 04 2006,22:03)
Няма "нормални" стойности. А и няма значение дали е на 2,4,8,64 процесорна машина - обикновено машините с повече процесори вършат повече работа :) За мене лично стойности над 1 са обезпокоителни и почвам да се ровя да видя какъв е проблема. Ако по принцип loadavg ти е 0.3 да речем и изведнъж скочи над 1 и стои така над 15 минути значи очевидно нещо не е наред. За жалост диагностицирането на проблема не винаги е тривиално.

Да, наистина няма нормални стойности! Още повече, че стойности от порядъка на 1-5 за 1 минута са нормални дори за десктоп система. При сървърите нещата отиват дори до 150 - 200 процеса за минута. Не мисля, че стойност от 1 е притеснителна дори за дълго време. По скоро притеснително е ако даден процес заема прекалено дълго процесора и то безсмислено, но това се диагностицира по-добре с top и според мен е "тривиално".





Титла: Top и load average
Публикувано от: astronom в Oct 05, 2006, 17:24
Цитат (gat3way @ Окт. 04 2006,23:30)
loadavg стойност над броя процесори може да е индикация за много неща, не определено за това че капацитетът на процесорите е изчерпан.

Това е невярно! Най-общо казано load average е броя на процесите в опашката за изпълнение (run queue) за едница време (най-често 1/5/15 минути). Това няма нищо общо с броя на процесорите, защото както знаете има времеделене и всеки процес получава полагащото му се процесорно време спрямо приоритета си. Така, че няма нищо странно в load average за последната минута от 3.75 на еднопроцесорна машина.


Титла: Top и load average
Публикувано от: gat3way в Oct 05, 2006, 17:39
150-200 running процеса? Уау, тия задачи явно страдат от безсъние, всичките никъде не срещат blocking операции съответно не sleep-ват :)

Тривиално?  Хм, да речем че процентите CPU usage от top са меродавен критерии. Какво ще направиш на една production машина, ще утрепеш виновния процес?

Мммм...не ми допадат тези идеи, въпреки че определено не е моя работа какво правите :)

Цитат
Най-общо казано load average е броя на процесите в опашката за изпълнение (run queue) за едница време (най-често 1/5/15 минути). Това няма нищо общо с броя на процесорите, защото както знаете има времеделене и всеки процес получава полагащото му се процесорно време спрямо приоритета си


Хммм, като имаш няколко процесора обикновено task scheduler-a е smp/numa-aware. Ако имаш 2 процесора и 4 running процеса, 2 от тях ще се изпълняват и 2 ще стоят на опашката. Ако имаш един процесор и отново 4 running процеса, един ще се изпълнява и три ще висят в опашката.

Съответно ако това състояние се запази над една минута, първата стойност на loadavg ще бъде съответно в първия случай около 2, във втория около 3. Въпросът е че повечето приложения по време на изпълнението си все в един момент стигат до някаква blocking операция: дали ще е очакване на вход от конзолата, дали ще чакат някакъв пакет от мрежата, дали нещо друго, няма значение. Затова е и примера със празния безкраен цикъл където няма такава операция и за една минута изпълнение loadavg/мин се увеличава с 1 - т.е процесът през цялото време е бил в running state.

Така че loadavg има толкова общо с броя процесори колкото общо има и с броя на процесите в "Running" състояние.





Титла: Top и load average
Публикувано от: astronom в Oct 06, 2006, 11:17
Цитат (gat3way @ Окт. 05 2006,17:39)
Така че loadavg има толкова общо с броя процесори колкото общо има и с броя на процесите в "Running" състояние.

Напротив има! За доказателство може да се разгледа кода на ядрото:
kernel/timer.c, line 864
kernel/timer.c, line 843
kernel/sched.c, line 1669

Може да се направи извода, че load average (поне в Linux) e броя на изпълняващите се процеси и процесите в състояние uninterruptible за единица време върху всички процесори. Иначе казано броя на процесите в опашката за изпълнение за единица време.

Ако не се лъжа точно ти свърза броя на процесорите с load average-а:
Цитат (gat3way @ Окт. 04 2006,23:30)
loadavg стойност над броя процесори може да е индикация за много неща, не определено за това че капацитетът на процесорите е изчерпан.






Титла: Top и load average
Публикувано от: gat3way в Oct 06, 2006, 16:18
Цитат


Така че loadavg има толкова общо с броя процесори колкото общо има и с броя на процесите в "Running" състояние.

Напротив има! За доказателство може да се разгледа кода на ядрото:



Добре, къде видя да съм писал че нямат?  :)

Цитат
Може да се направи извода, че load average (поне в Linux) e броя на изпълняващите се процеси и процесите в състояние uninterruptible за единица време върху всички процесори. Иначе казано броя на процесите в опашката за изпълнение за единица време.

и:
Цитат
Накратко трите числа показват колко процеса са стояли в опашката чакащи за процесорно време средно в последната 1/5/15 минути.


За какво точно спорим ? :)