[Linux] нагрузка на CPU
Мне чего-то кажется, что с CPU как раз проще, чем с памятью. Т.к. она обычно вся используется под кеш и чтобы точно сказать можно ли от этого кеша безболезненно откусить, это надо знать специфику приложения.
Загрузку проца тебе разве top не показывает?
Загрузку проца тебе разве top не показывает?
How to Limit The CPU Usage of Any Process in Linux
http://maketecheasier.com/limit-cpu-usage-of-any-process-in-...
И ещё много таких утилит по ограничению ресурсов для процессов. Ничего практически писать самому не придётся. Тебе только нужно придумать критерии по которым происходит то или иное ограничение. В твоём случае по CPU.
http://maketecheasier.com/limit-cpu-usage-of-any-process-in-...
И ещё много таких утилит по ограничению ресурсов для процессов. Ничего практически писать самому не придётся. Тебе только нужно придумать критерии по которым происходит то или иное ограничение. В твоём случае по CPU.
Вот ещё:
Putting a Group of Processes into a CPU and Memory Jail — First Steps with Control Groups in Linux
http://linux-tipps.blogspot.com/2011/06/putting-group-of-pro...
Putting a Group of Processes into a CPU and Memory Jail — First Steps with Control Groups in Linux
http://linux-tipps.blogspot.com/2011/06/putting-group-of-pro...
Разве та память, которая free в выводе top'a не является свободной? Да и по идее есть swap раздел, так что думаю ОС туда выгрузить что-то сможет.
top показывает нагрузку на различные режимы проца, думаю логичным было бы использовать показатель idle, но как связать его с вычислительной мощностью проца?
top показывает нагрузку на различные режимы проца, думаю логичным было бы использовать показатель idle, но как связать его с вычислительной мощностью проца?
А вообще много всего интересного на эту тему можно найти тут:
Интересные ссылки, HOWTO, tips и т.д. постим здесь :
Интересные ссылки, HOWTO, tips и т.д. постим здесь :
Это не совсем то, мне не нужно ограничивать процессы по нагрузке - мне необходимо узнать текущую нагрузку на цпу и исходя из этого увеличить или уменьшить вычислительную мощность цпу.
Это вообще нужно, чтобы например при наплыве посетителей сервак не начинал жутко тормозить и свапить, а продолжал стабильную работу, но уже с большей по объему оперативкой и более быстрым цпу.
Это вообще нужно, чтобы например при наплыве посетителей сервак не начинал жутко тормозить и свапить, а продолжал стабильную работу, но уже с большей по объему оперативкой и более быстрым цпу.
Это вообще нужно, чтобы например при наплыве посетителей сервак не начинал жутко тормозить и свапитьЯ бы в качестве первого решения просто мониторил бы LA (load average)
LA - слишком расплывчатый показатель, который зависит от многих подсистем, а не только проца. Да и опять же непонятно, как его связать с цпу. При одном и том же ЛА сервак может и еле ползать и норм работать.
LA - слишком расплывчатый показатель, который зависит от многих подсистем, а не только проца. Да и опять же непонятно, как его связать с цпу. При одном и том же ЛА сервак может и еле ползать и норм работать.Если что, субъективное ощущение "торможения" вызывается не активным использованием проца, а активным I/O, так что если ты ищешь, как сделать, "чтобы не тормозило", надо не проц делить, а ввод/вывод тюнить, в том числе и проверить, что нет интенсивного свопа.
Это не совсем то, мне не нужно ограничивать процессы по нагрузке - мне необходимо узнать текущую нагрузку на цпу и исходя из этого увеличить или уменьшить вычислительную мощность цпу.Ты имеешь ввиду это?:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 0 1 2 3
CPUs which need to have their frequency coordinated by software: 3
maximum transition latency: 10.0 us.
hardware limits: 933 MHz - 2.13 GHz
available frequency steps: 2.13 GHz, 2.00 GHz, 1.87 GHz, 1.73 GHz, 1.60 GHz, 1.47 GHz, 1.33 GHz, 1.20 GHz, 1.07 GHz, 933 MHz
available cpufreq governors: ondemand, conservative, powersave, userspace, performance
current policy: frequency should be within 933 MHz and 2.13 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency is 2.13 GHz.
При увеличении нагрузки увеличить частоту проца из заданного предела?
Или дать больше ядер на задачу?
Или выделить больше циклов проца на задачу?
Других вариантов я не придумал пока.
Есть ещё это:
нет, не это, у меня облачный vps - я могу (выделять ресурсы) менять частоту проца и изменять объем оперативки на лету , не перезагружая сервер. Вот и хочется заиметь скрипт, который анализируя ситуацию на серваке будет изменять эти два параметра. В конечном счете, это позволит меньше платить за сервак - оплата только за те ресурсы, которые необходимы в данный момент.
Не в кассу, но все равно посоветую вариант привязаться не к загрузке памяти/проца - а к среднему времени ответа на запрос. Это может оказаться сложнее в реализации, зато метрика более правильная имхо.
На какой запрос? Пример приведи, плиз. Если я правильно понял, то тут такой может быть косяк - демон висит в памяти - память на него отведена, и обрабатывать какой -то запрос он сможет без особых задержек, но при этом оперативка уже закончилась и все новые процессы, например потоки апача будут писаться в свап, тем самым для апача будет снижена производительность.
Разве та память, которая free в выводе top'a не является свободной? Да и по идее есть swap раздел, так что думаю ОС туда выгрузить что-то сможет.swap вообще можно отключить, наверное в таких условиях.
Ну вот смотри пример top с моего компа:
Mem: 761832k total, 566432k used, 195400k free, 12k buffers
Swap: 0k total, 0k used, 0k free, 299404k cached
Тут free 195400 — да, она свободная. Но она при первой же возможности будет занята файловым кешем, который там останется до тех пор, пока не "протухнет" или не понадобится память приложению.
Тут сильно зависит от твоего приложения. Если у тебя что-нибудь числодробильное, которому нужна память, чтобы хранить данные, и совсем не надо читать файлы какие-нибудь, то тут можно ориентироваться на свободное как cached+free. А если у тебя какой-нибудь файловый сервер, то ему чем больше памяти тем лучше и скорее всего у него free будет около 0 всегда.
Ну собственно даже пример с файлового сервера:
Mem: 4053108k total, 3991604k used, 61504k free, 24k buffers
Swap: 8789056k total, 0k used, 8789056k free, 3661068k cached
Из 4-х гигов 3.6 заюзано под файловый кеш. free колеблется 50-200 мегов.
Т.е. тут надо искать компромисс. Как тебе уже сказали — если, например, у тебя это веб-сервер, обслуживающий клиентов, то можно остановиться после достижения удовлетворительного времени отклика.
top показывает нагрузку на различные режимы проца, думаю логичным было бы использовать показатель idle, но как связать его с вычислительной мощностью проца?Опять же всё зависит от приложения. Load Average, кстати, не такая уж и плохая характеристика. А если на загрузку в % смотреть, то тут на idle, wait можно обратить внимание.
по умолчанию это все-таки веб-сервер.
Настройка на отклик, имхо, не самое лучшее - почему, описал в предыдущем посте.
Интересно, как в среднем изменяется idle при увеличении мощности проца. Думаю, помогут какие-нибудь бенчмарки с не стресс-тестами, иначе не смогу понять динамику зависимости свободных ресурсов проца от тактовой частоты для одной и той же задачи. Да, проц 4-ядерный, в top'e как я понял, выводится среднее по всем ядрам.
Настройка на отклик, имхо, не самое лучшее - почему, описал в предыдущем посте.
Интересно, как в среднем изменяется idle при увеличении мощности проца. Думаю, помогут какие-нибудь бенчмарки с не стресс-тестами, иначе не смогу понять динамику зависимости свободных ресурсов проца от тактовой частоты для одной и той же задачи. Да, проц 4-ядерный, в top'e как я понял, выводится среднее по всем ядрам.
Настройка на отклик, имхо, не самое лучшее - почему, описал в предыдущем посте.Там чего-то непонятное написано, про апачи в свопе. Т.к. когда твои апачи в свопе не смогут работать из-за того, что память занята, то это повлияет на время отклика и оно вырастет.
Интересно, как в среднем изменяется idle при увеличении мощности проца.Смотря на что проц расходуется. Для вычислительных независимых задач — примерно линейно производительность растёт. Если оно на ожидание IO тратится, то тут уже другие проблемы.
Да, проц 4-ядерный, в top'e как я понял, выводится среднее по всем ядрам.Там если нажимать "1", то оно будет переключаться между общим и по каждому процессору.
Т.к. когда твои апачи в свопе не смогут работать из-за того, что память занята, то это повлияет на время отклика и оно вырастет.ну да, есть демон - измеряю от него ответ, так как он уже загружен в память, отсутствие свободной оперативки на его работе не скажется, но при этом новый процессы апача или , например, sshd будут располагаться в свопе, что приведет к снижению производительности конкретно этих процессов. В случае VPS на openVZ они просто не смогут форкнуться, тк там нет свопа и умрут, сейчас к счастью Хen, так что этой проблемы не будет.
но при этом новый процессы апача или , например, sshd будут располагаться в свопе, что приведет к снижению производительности конкретно этих процессовПроцессы в свопе выполняться не могут. Сначала они должны будут переместиться в основную память, а для этого кто-то другой должен будет уйти в своп.
Спасибо, не знал. Короче потихоньку понимаю всю сложность задачи в отсутствии универсального решения.
скорость проца (в MHz типа-производительность (в BogoMIPS) и количество ядер берётся из /proc/cpuinfo
текущая загрузка из load
текущая загрузка из load
обычно на распределенных продакшеновых системах на каждом боксе живет один сервис, который собсно распределяется. соотв тогда естественно мерять его респонс.
но, очевидно, я неправильно протелепатил ситуацию, и у тебя на одном сервере крутится все подряд.
в этом случае LA, кстати, очень неплохой показатель. Если он раза в полтора больше, чем количество ядер, то очевидно, что сервер начинает сильно страдать от нехватки цпу.
но, очевидно, я неправильно протелепатил ситуацию, и у тебя на одном сервере крутится все подряд.
в этом случае LA, кстати, очень неплохой показатель. Если он раза в полтора больше, чем количество ядер, то очевидно, что сервер начинает сильно страдать от нехватки цпу.
не очевидно - почему упирается именно в цпу, а не в сеть или I/O, в LA -это тоже учитывается. А ошибка тут будет стоить денег, ибо будет увеличена частота проца - а это дополнительные деньги.
не очевидноПоверь.
Вот тестировал VPS с помощью ab, проц 4-ядерный: Обратите внимание на LA (в 2 раза больше колва ядер) и загрузку CPU по us и id.
top - 17:35:36 up 1 day, 20:06, 2 users, load average: 8.15, 4.70, 2.44
Tasks: 24 total, 12 running, 12 sleeping, 0 stopped, 0 zombie
Cpu(s): 15.9%us, 39.4%sy, 0.0%ni, 44.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1048576k total, 340736k used, 707840k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached
первая циферка это средняя нагрузка за последнюю минуту. эта копипаста сделана случайно ли не после того, как ты вырубил бенчмарк?
если нет - то надо смотреть, интересная картинка. это на ксене такое?
если нет - то надо смотреть, интересная картинка. это на ксене такое?
это на openVZ, бенчмарк еще работал.
может быть опенвз чудит, но я хз
попробуй на ксене то же самое погонять
вообще таких циферок имхо не должно быть
попробуй на ксене то же самое погонять
вообще таких циферок имхо не должно быть
да, погонял на ксене, все более логично - при тесте с помощью ab на свежоустановленную джумлу LA сильно росло при отсутствии свободной оперативки, увеличив колво памяти сервер ожил и LA пошло на спад, увеличив кол-во ядер нагрузка вообще устаканилась.
Интересные изменения в новой версии GNU Parallel 20110722 ('Murdoch'):
Может быть там что-то будет полезное при написании твоей программы?
New in this release:
niceload: --hard will suspend a program if a limit is reached - as opposed to just slowing the program down.
niceload: --soft will slow the program down - as opposed to suspending the program completely.
niceload: --run-io will slow down a program if disk io goes above a certain limit.
niceload: --run-load will slow down a program if loadaverage goes above a certain limit.
niceload: --run-mem will slow down a program if free memory goes below a certain limit.
niceload: --run-noswap will slow down a program if the computer is swapping.
niceload: --start-io, --start-load, --start-mem, --start-noswap will defer starting a program until the system is below the limit.
--io, --load, --mem, and --noswap sets both --run-* and --start-*.
niceload got a major rewrite and is now object oriented.
Может быть там что-то будет полезное при написании твоей программы?
не, решил мониторить оперативу free+cache+buffered и LA. Я немного ошибся, частоту cpu менять нельзя, можно изменять количество ядер на лету, так даже проще.
Оставить комментарий
SergeRRRRRR
Хочу написать скрипт, который будет автоматически масштабировать облачный VPS в зависимости от нагрузки. По памяти понятно - парсить вывод команды top или free. Прикинул, что норм будет, если 40% оперативки свободно, при менее 20% или более 60% свободной оперативки общее количество памяти будет доводиться до того значения, чтобы свободной было 40%.Загвоздка в CPU - каким параметром можно воспользоваться при определении нагрузки на CPU и как его привязать к скорости проца?