Автор Тема: Скрипт за kill на процеси (overload)  (Прочетена 3080 пъти)

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Здравейте,

търся наистина читав скрипт, който да килва/рестартира процеси, които надхвърлят 90% cpu usage в продължение на 10 секунди примерно. Това ще означава, че процесът е забил и трябва да бъде рестартиран.

Благодаря предварително.
Активен

pennywise

  • Гост
Re: Скрипт за kill на процеси (overload)
« Отговор #1 -: Jan 29, 2015, 19:25 »
Хвърли око на монит - http://mmonit.com/monit/

Може да ти се струва малко прекалено, но е доста полезно.
Активен

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 5738
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Скрипт за kill на процеси (overload)
« Отговор #2 -: Jan 29, 2015, 19:42 »
Не съм убеден, че това е сигурен знак, че нещо е забило. Процеси с интезивни изчисления не като да няма хиляди. По-скоро бих си пренаписал проблемите неща/
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Скрипт за kill на процеси (overload)
« Отговор #3 -: Jan 29, 2015, 23:25 »
Не съм убеден, че това е сигурен знак, че нещо е забило. Процеси с интезивни изчисления не като да няма хиляди. По-скоро бих си пренаписал проблемите неща/

В моя случай става въпрос за наистина забил процес, който иска задължително рестартиране.

Все пак някой скрипт?

Ще погледна и твоето предложение pennywise, но ми трябва спешно такъв работещ скрипт.
Активен

Astor

  • Напреднали
  • *****
  • Публикации: 332
    • Профил
Re: Скрипт за kill на процеси (overload)
« Отговор #4 -: Jan 29, 2015, 23:34 »
Здравей globaluty,

Това, че процесорът (или сумарно всички налични виртуални процесори) е на 90% Usage е абсолютно нормално състояние и не е редно да kill-ваш нищо. Процесорът е за това да работи. Дали ще работи на 10-90 или 99% е абсолютно едно и също, не се отразява на производителността.

По скоро индикатор за това дали нещо е "забило" може да се приеме увеличението на load-а. Тогава нещо стои и чака за cpu време и се увеличава латентостта.

Дали е забил даден процес би било редно да провериш директно тествайки неговата наличност и тогава евентуално да предпиемеш мерки.

За по-пълна помощ може да споделиш кой/какъв точно процес те съмнява, че забива.
Активен

Няма начин, да няма начин!

pennywise

  • Гост
Re: Скрипт за kill на процеси (overload)
« Отговор #5 -: Jan 29, 2015, 23:57 »
Ако искаш специфични процеси при определен load, ползвай това и си го промени както ти изнася.

Код
GeSHi (Bash):
  1. #!/bin/sh
  2. # script to check server for extremely high load and restart Apache/Nginx/Varnish/MySQL if the cond$
  3. check=`cat /proc/loadavg | sed 's/\./ /' | awk '{print $1}'`
  4. # define max load avarage when script is triggered
  5. max_load='9'
  6. # log file
  7. high_load_log='/var/log/server_high_load_restart.log';
  8. #
  9. if [ $check -gt "$max_load" ]; then
  10. service nginx restart
  11. sleep 5;
  12. service php5-fpm restart
  13. sleep 5;
  14. service varnish restart
  15. echo "$(date) : Server Restart due to excessive load | $check |" >> $high_load_$
  16. fi
  17.  

Сложи го в кронтаб.
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Скрипт за kill на процеси (overload)
« Отговор #6 -: Jan 30, 2015, 01:38 »
Пълни простотии са това и широко отворена врата за по-големи золуми, без значение дали естествени или умишлени, с човешки характер. Ако става въпрос за уеб приложение, тогава вече е върховна тъпотия и мърлявщина на девелоперите. Единственото място където съм виждал такъв подход и където има смисъл е в разни realtime операционни системи като QNX. Там има установен watchdog механизъм, софтуерът трябва да е написан така че да ползва това API, периодично се изпращат "ping"-ове към определени критични процеси. Ако някой от тях не отговори в разумно време, следва рестарт на операционната система. Там има смисъл, защото касае или критични приложения където проблемът може да стане веднъж в рамките на години, но да е катастрофален, примерно рентгенов апарат или управление на електроцентрала, или пък да няма лесен и удобен начин да се дебъгне проблема и да се отстрани в движение, примерно ако е на някой марсоход. Но надали случаят е такъв.
Активен

"Knowledge is power" - France is Bacon

korea60

  • Напреднали
  • *****
  • Публикации: 189
    • Профил
Re: Скрипт за kill на процеси (overload)
« Отговор #7 -: 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()
Активен

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Скрипт за kill на процеси (overload)
« Отговор #8 -: Jan 30, 2015, 21:50 »
Здравейте,

давам пример със снимка: http://prikachi.com/images.php?images/255/7887255R.jpg

Това е гейм сървър, който използва в момента 63%. На машината има няколко такива.

Когато даден от тях превиши 90% и се задържи за определено време Х, то той да бъде килван/рестартиран.

Надявам се сега да са ме разбрали максимално повече хора.
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Скрипт за kill на процеси (overload)
« Отговор #9 -: Jan 31, 2015, 00:43 »
Нямам думи :)
Активен

"Knowledge is power" - France is Bacon

zeridon

  • Killmode enabled
  • Administrator
  • Напреднали
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Re: Скрипт за kill на процеси (overload)
« Отговор #10 -: Jan 31, 2015, 10:52 »
Първо това не трябва да работи с руут щото си плаче за беля

Второ това че яде повечко цпу не е проблем

Подходът е да се провери дали ФУНКЦИОНИРА правилно. Дали приема заявки и т.н.

Ако все пак ужасно много настояваш да проверяваш само цпу натоварването за даден процес може да се ползва монит

Примерна проверка

Код
GeSHi (Bash):
  1. check process hlds-blqblq with pidfile /path/to/hlds.pid
  2.  stop program = "kill -9 `cat /path/to/hlds.pid`
  3.  start program = "whatever you use to start it" as uid hldsuser as gid hldsuser timeout 30"
  4.  if cpu > 80% for 5 cycles then restart
  5.  

Естествено трябва да си пипнеш нещата хлдс-то да си прави пид файл. Цикъл в монит обикновенно е 30 секунди. Името на процеса е относително свобоно. Процеса се определя в случая от pid файла.

За повече инфо за монит: http://mmonit.com/monit/documentation/monit.html
Активен

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Скрипт за kill на процеси (overload)
« Отговор #11 -: Feb 01, 2015, 12:21 »
Благодаря за информацията.

В моя случай такъв голям cpu usage в 99.9% от случаите е еквивалент на НЕФУНКЦИОНИРАЩ правилно процес и единственото решение е restart, не знам защо се опитвате да ме убедите в обратното.
Активен

4096bits

  • Напреднали
  • *****
  • Публикации: 3523
    • Профил
Re: Скрипт за kill на процеси (overload)
« Отговор #12 -: Feb 01, 2015, 13:25 »
Пълни простотии са това и широко отворена врата за по-големи золуми, без значение дали естествени или умишлени, с човешки характер. Ако става въпрос за уеб приложение, тогава вече е върховна тъпотия и мърлявщина на девелоперите. Единственото място където съм виждал такъв подход и където има смисъл е в разни realtime операционни системи като QNX. Там има установен watchdog механизъм, софтуерът трябва да е написан така че да ползва това API, периодично се изпращат "ping"-ове към определени критични процеси. Ако някой от тях не отговори в разумно време, следва рестарт на операционната система. Там има смисъл, защото касае или критични приложения където проблемът може да стане веднъж в рамките на години, но да е катастрофален, примерно рентгенов апарат или управление на електроцентрала, или пък да няма лесен и удобен начин да се дебъгне проблема и да се отстрани в движение, примерно ако е на някой марсоход. Но надали случаят е такъв.
На марсоходите явно не използват нещо такова, ами ще да е  Win Server 2012 или нещо от сорта :D
Все пак, явно успяват някак да рестартират системата от разстояние от време на време,  та да се порадваме на измислени марсианци и следи от цивилизацията им.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Kill Bill
Хумор
cable 3 1586 Последна публикация Mar 12, 2005, 19:01
от kennedy
Kill ppp if no traffic
Настройка на програми
orfey 1 1071 Последна публикация Aug 29, 2007, 19:18
от the_real_maniac
Processor overload
Хардуерни и софтуерни проблеми
bolero 3 1615 Последна публикация Jul 20, 2008, 00:19
от bolero
AMD kill ATI
Живота, вселената и някакви други глупости
n00b 13 2128 Последна публикация Aug 30, 2010, 23:41
от n00b
ПРЕМЕСТЕНО: Скрипт за kill на процеси (overload)
Настройка на програми
neter 0 674 Последна публикация Jan 30, 2015, 00:24
от neter