Титла: Скрипт за kill на процеси (overload) Публикувано от: globaluty в Jan 29, 2015, 19:01 Здравейте,
търся наистина читав скрипт, който да килва/рестартира процеси, които надхвърлят 90% cpu usage в продължение на 10 секунди примерно. Това ще означава, че процесът е забил и трябва да бъде рестартиран. Благодаря предварително. Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: pennywise в Jan 29, 2015, 19:25 Хвърли око на монит - http://mmonit.com/monit/
Може да ти се струва малко прекалено, но е доста полезно. Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: go_fire в Jan 29, 2015, 19:42 Не съм убеден, че това е сигурен знак, че нещо е забило. Процеси с интезивни изчисления не като да няма хиляди. По-скоро бих си пренаписал проблемите неща/
Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: globaluty в Jan 29, 2015, 23:25 Не съм убеден, че това е сигурен знак, че нещо е забило. Процеси с интезивни изчисления не като да няма хиляди. По-скоро бих си пренаписал проблемите неща/ В моя случай става въпрос за наистина забил процес, който иска задължително рестартиране. Все пак някой скрипт? Ще погледна и твоето предложение pennywise, но ми трябва спешно такъв работещ скрипт. Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: Astor в Jan 29, 2015, 23:34 Здравей globaluty,
Това, че процесорът (или сумарно всички налични виртуални процесори) е на 90% Usage е абсолютно нормално състояние и не е редно да kill-ваш нищо. Процесорът е за това да работи. Дали ще работи на 10-90 или 99% е абсолютно едно и също, не се отразява на производителността. По скоро индикатор за това дали нещо е "забило" може да се приеме увеличението на load-а. Тогава нещо стои и чака за cpu време и се увеличава латентостта. Дали е забил даден процес би било редно да провериш директно тествайки неговата наличност и тогава евентуално да предпиемеш мерки. За по-пълна помощ може да споделиш кой/какъв точно процес те съмнява, че забива. Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: pennywise в Jan 29, 2015, 23:57 Ако искаш специфични процеси при определен load, ползвай това и си го промени както ти изнася.
Код
Сложи го в кронтаб. Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: gat3way в Jan 30, 2015, 01:38 Пълни простотии са това и широко отворена врата за по-големи золуми, без значение дали естествени или умишлени, с човешки характер. Ако става въпрос за уеб приложение, тогава вече е върховна тъпотия и мърлявщина на девелоперите. Единственото място където съм виждал такъв подход и където има смисъл е в разни realtime операционни системи като QNX. Там има установен watchdog механизъм, софтуерът трябва да е написан така че да ползва това API, периодично се изпращат "ping"-ове към определени критични процеси. Ако някой от тях не отговори в разумно време, следва рестарт на операционната система. Там има смисъл, защото касае или критични приложения където проблемът може да стане веднъж в рамките на години, но да е катастрофален, примерно рентгенов апарат или управление на електроцентрала, или пък да няма лесен и удобен начин да се дебъгне проблема и да се отстрани в движение, примерно ако е на някой марсоход. Но надали случаят е такъв.
Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: korea60 в Jan 30, 2015, 15:22 Използвам ред от коментара на pennywise, с разликата че е добавено и време за проверка, т.е. не се килва процеса веднага, а би трябвало да провери колкото пъти укажеш дали лоада е по-голям от зададеното.
import os import time from commands import getoutput min=2 retries=2 interval=2 def check(): count = retries while True: cpu = int(getoutput(`cat /proc/loadavg | sed 's/\./ /' | awk '{print $1}'`)) print "This is CPU:'s", cpu if (cpu > min and count <= 0): print "Stana mnogo Golqm load-a. os.system("/etc/init.d/service restart") elif (cpu > min): count -= 1 time.sleep(interval) else: count = retries time.sleep(interval) print "OK cpu now is %s" % cpu check() Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: globaluty в Jan 30, 2015, 21:50 Здравейте,
давам пример със снимка: http://prikachi.com/images.php?images/255/7887255R.jpg Това е гейм сървър, който използва в момента 63%. На машината има няколко такива. Когато даден от тях превиши 90% и се задържи за определено време Х, то той да бъде килван/рестартиран. Надявам се сега да са ме разбрали максимално повече хора. Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: gat3way в Jan 31, 2015, 00:43 Нямам думи :)
Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: zeridon в Jan 31, 2015, 10:52 Първо това не трябва да работи с руут щото си плаче за беля
Второ това че яде повечко цпу не е проблем Подходът е да се провери дали ФУНКЦИОНИРА правилно. Дали приема заявки и т.н. Ако все пак ужасно много настояваш да проверяваш само цпу натоварването за даден процес може да се ползва монит Примерна проверка Код
Естествено трябва да си пипнеш нещата хлдс-то да си прави пид файл. Цикъл в монит обикновенно е 30 секунди. Името на процеса е относително свобоно. Процеса се определя в случая от pid файла. За повече инфо за монит: http://mmonit.com/monit/documentation/monit.html Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: globaluty в Feb 01, 2015, 12:21 Благодаря за информацията.
В моя случай такъв голям cpu usage в 99.9% от случаите е еквивалент на НЕФУНКЦИОНИРАЩ правилно процес и единственото решение е restart, не знам защо се опитвате да ме убедите в обратното. Титла: Re: Скрипт за kill на процеси (overload) Публикувано от: 4096bits в Feb 01, 2015, 13:25 Пълни простотии са това и широко отворена врата за по-големи золуми, без значение дали естествени или умишлени, с човешки характер. Ако става въпрос за уеб приложение, тогава вече е върховна тъпотия и мърлявщина на девелоперите. Единственото място където съм виждал такъв подход и където има смисъл е в разни realtime операционни системи като QNX. Там има установен watchdog механизъм, софтуерът трябва да е написан така че да ползва това API, периодично се изпращат "ping"-ове към определени критични процеси. Ако някой от тях не отговори в разумно време, следва рестарт на операционната система. Там има смисъл, защото касае или критични приложения където проблемът може да стане веднъж в рамките на години, но да е катастрофален, примерно рентгенов апарат или управление на електроцентрала, или пък да няма лесен и удобен начин да се дебъгне проблема и да се отстрани в движение, примерно ако е на някой марсоход. Но надали случаят е такъв.На марсоходите явно не използват нещо такова, ами ще да е Win Server 2012 или нещо от сорта :D Все пак, явно успяват някак да рестартират системата от разстояние от време на време, та да се порадваме на измислени марсианци и следи от цивилизацията им. |