[Linux] нагрузка на CPU
Загрузку проца тебе разве top не показывает?
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...
top показывает нагрузку на различные режимы проца, думаю логичным было бы использовать показатель idle, но как связать его с вычислительной мощностью проца?
Интересные ссылки, 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 при увеличении мощности проца.Смотря на что проц расходуется. Для вычислительных независимых задач — примерно линейно производительность растёт. Если оно на ожидание IO тратится, то тут уже другие проблемы.
Да, проц 4-ядерный, в top'e как я понял, выводится среднее по всем ядрам.Там если нажимать "1", то оно будет переключаться между общим и по каждому процессору.
Т.к. когда твои апачи в свопе не смогут работать из-за того, что память занята, то это повлияет на время отклика и оно вырастет.ну да, есть демон - измеряю от него ответ, так как он уже загружен в память, отсутствие свободной оперативки на его работе не скажется, но при этом новый процессы апача или , например, sshd будут располагаться в свопе, что приведет к снижению производительности конкретно этих процессов. В случае VPS на openVZ они просто не смогут форкнуться, тк там нет свопа и умрут, сейчас к счастью Хen, так что этой проблемы не будет.
но при этом новый процессы апача или , например, sshd будут располагаться в свопе, что приведет к снижению производительности конкретно этих процессовПроцессы в свопе выполняться не могут. Сначала они должны будут переместиться в основную память, а для этого кто-то другой должен будет уйти в своп.
Спасибо, не знал. Короче потихоньку понимаю всю сложность задачи в отсутствии универсального решения.
текущая загрузка из load
но, очевидно, я неправильно протелепатил ситуацию, и у тебя на одном сервере крутится все подряд.
в этом случае LA, кстати, очень неплохой показатель. Если он раза в полтора больше, чем количество ядер, то очевидно, что сервер начинает сильно страдать от нехватки цпу.
не очевидно - почему упирается именно в цпу, а не в сеть или I/O, в LA -это тоже учитывается. А ошибка тут будет стоить денег, ибо будет увеличена частота проца - а это дополнительные деньги.
не очевидноПоверь.
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 пошло на спад, увеличив кол-во ядер нагрузка вообще устаканилась.
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 и как его привязать к скорости проца?