Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Automatischer Wartungsmodus bei hoher Serverauslastung

  1. #1
    Erfahrener Benutzer Avatar von hankfromhelvete
    Registriert seit
    26.04.2007
    Beiträge
    633

    Automatischer Wartungsmodus bei hoher Serverauslastung

    Mit der folgenden Änderung wird der User bei einer hohen Serverlast automatisch auf die Wartungsseite umgeleitet. Dadurch verringert sich die Last und der User sollte, nachdem wieder genügend Ressourcen frei sind, die Seite aufrufen können. Der Admin kann die Seite wie bei dem 'normalen' Wartungsmodus weiterhin nutzen.

    Vorwort
    Zunächst solltet ihr euren load average beobachten. Wichtig dabei ist, dass Ihr einen Grenzwert feststellt, ab wann der Server in die Knie geht. Den Wert kann man sich z.b. mit folgendem Code ausgeben lassen:

    PHP-Code:
    $load sys_getloadavg();
    echo 
    $load[0]; 
    Wenn ihr einen 'Grenzwert' herausgefunden habt, müssen folgende Änderungen in der /lib/sessions.lib.php vorgenommen werden.

    1. In ca. Zeile 23 unter

    PHP-Code:
    $pageconfig mysql_fetch_array(db_query("SELECT * FROM ".$db_prefix."_seitenkonfig LIMIT 1")); 
    folgenden Code einfügen

    PHP-Code:
    $load sys_getloadavg(); 


    2.
    Die if-Abfrage in ca. Zeile 24

    PHP-Code:
    if ($pageconfig['wartung'] == && $_SESSION['uid'] != $admin_id) { 
    ersetzen mit

    PHP-Code:
    if ($pageconfig['wartung'] == && $_SESSION['uid'] != $admin_id || $load[0] > 90 && $_SESSION['uid'] != $admin_id) { 
    Das wars


    Hinweis
    90 dient lediglich als Beispiel und sollte auf euren ermittelten 'Grenzwert' geändert werden.

  2. #2
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206
    Die 90 steht nicht für die prozentuale Auslastung, sondern für die durchschnittliche Anzahl der Prozesse in der Warteschlange.

    Wenn du sowas machst würde ich $load[2] nutzen denn das ist innerhalb der letzten 15 Minuten, es kann nämlich mal schnell passieren, dass es viele sind, aber über einen kurzen Zeitruam macht das nichts aus.

    Mal so ein kleiner Auszug hier vom Server aktuell:
    [0] => 0.44 [1] => 0.69 [2] => 0.92 Damit wäre bei dir schon Wartungsmodus (bei 15 Minuten). Dabei ist der Server aktuell nicht mal 20% ausgelastet :-)
    Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!



  3. #3
    Erfahrener Benutzer Avatar von hankfromhelvete
    Registriert seit
    26.04.2007
    Beiträge
    633
    Danke fürs Feedback. Das mit den % werde ich ändern.

    Hmm, wenn ich [2] nehme, könnte die Wartung unnötig eingeschaltet werden, wie man bei deinen Werten z.B. sehen kann. Dann müsste ich den Wert auf 99 oder 100 setzen. [0] wäre eigentlich 'aktueller'.

  4. #4
    Erfahrener Benutzer Avatar von Kraemer84
    Registriert seit
    24.11.2009
    Beiträge
    814
    das ist genial kannste den fertigen code nochmal posten bitte ?

    weil is nur ein gedanke aber bringt das nicht auch was bei bruteforceattacken ?

    brute force überlastet ja den server mit befehlen und wenn dann noch so ein wartungsmodus reinkommt ist der ja auch für den der die bruteforce attacke startet ergo vllt sogar ein abbruch der brute force attacke ??

    weil ich so ein mist überhaupt nicht gut heiße


    oder

    PHP-Code:
    if ($pageconfig['wartung'] == && $_SESSION['uid'] != $admin_id || $load[0] > 90 && $_SESSION['uid'] != $admin_id) { 
    einfach ändern in

    PHP-Code:
    if ($pageconfig['wartung'] == && $_SESSION['uid'] != $admin_id || $load[0] > 90% && $_SESSION['uid'] != $admin_id) { 
    ?
    www.paid4advert.de | more coming soon ..

  5. #5
    Erfahrener Benutzer Avatar von hankfromhelvete
    Registriert seit
    26.04.2007
    Beiträge
    633
    Zitat Zitat von Kraemer84 Beitrag anzeigen
    das ist genial kannste den fertigen code nochmal posten bitte ?
    Der Code ist unverändert. Hatte nur die Beschreibung geändert.

    Zitat Zitat von Kraemer84 Beitrag anzeigen
    bringt das nicht auch was bei bruteforceattacken ?
    Wenn die Serverlast dadurch zu hoch wird ja.

    PHP-Code:
    if ($pageconfig['wartung'] == && $_SESSION['uid'] != $admin_id || $load[0] > 90% && $_SESSION['uid'] != $admin_id) { 
    Das wird nicht funktionieren, da der $load[0] keine % darstellt, wie Gremlin schon geschrieben hat. Man kann den Wert aber auch auf z.B. 95 stellen. Nur man sollte beachten, dass man nach oben hin noch etwas Performance braucht.

    Wenn man keine direkte Möglichkeit hat $load[0] zu kontrollieren, kann man den per echo ausgeben um so einen angemessenen Wert zu ermitteln. Muss man eigentlich nur zu Spitzenzeiten mal beobachten

  6. #6
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206
    Falls aktuell jemand online ist. Nun fängt es hier langsam an zu laggen, weil nun komplettbackups laufen. Dennoch erreichbar und Speed okay. Aktuelle serverload:

    Array ( [0] => 44.41 [1] => 28.87 [2] => 20.15 )

    Also ich finde man sollte Wartung machen wenn > 10 hatte

    Bei einem Projekt sowas auch mal drin ab >= 15 (bei [2] )

    Es kommt jedoch auch auf den Server drauf an. Muss man individuell beobachten wie es bei einem selbst aussieht. Ich könnte hier bis 40 locker laufen lassen.

    Prozentuale Werte wären da schon viel besser, aber da kommt man glaube ich irgendwie mit exec dran *grübel*
    Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!



  7. #7
    Benutzer
    Registriert seit
    25.04.2010
    Beiträge
    47
    ein load-wert von über 90? da wird jeder server vermutlich vorher schon ausgestiegen sein. bzw wieso hast du da ein % im code? wie schon gesagt ist der load absolut keine prozentuale angabe.

    mal ein paar zeilen aus wikipedia

    Load bezeichnet die momentan laufenden oder auf bestimmte Ereignisse wartenden Prozesse auf einem Computersystem. Man spricht dabei davon, dass „der Rechner einen Load von X hat“ (wobei X eine natürliche Zahl größer gleich null ist). Sie wird landläufig mit der Auslastung eines Computersystems gleichgesetzt. In der Unix-Welt, aus der der Begriff kommt, spricht man meistens von Load Average, dem Durchschnitt der Load-Werte über einen Zeitraum.
    und

    Die Load ist nicht die Auslastung des Computersystems, im speziellen nicht die Auslastung der CPU, sondern ein Maß dafür, wieviele gleichartige Systeme in einem Computer arbeiten müssten, um einen möglichen Engpass beseitigen zu können. Beispielsweise hat ein Computersystem einen Prozessor. Gleichzeitig benötigen zwei Prozesse die volle Rechenleistung (andere Ressourcen werden im Beispiel nicht beachtet). Das Betriebssystem verteilt nun die beiden Prozesse gleichmäßig so, dass Prozess 1 und Prozess 2 gleichmäßig viel Rechenleistung erhalten (Load Balancing). Die Load des Systems ist 2, die Auslastung der CPU liegt bei 100%. Man erweitert das Computersystem auf vier CPUs. Das Betriebssystem verteilt diese Last nun auf die zwei Prozesse, so dass also immer zwei CPUs voll arbeiten können, die beiden anderen liegen brach. Trotzdem rechnen die Prozesse nun doppelt so schnell und der Rechner hat dabei immer noch eine Load von 2, die Auslastung der CPUs ist jedoch nur 50%. Durch eine Programmverbesserung ist es nun möglich, die Last der zwei Prozesse auf alle vier CPUs zu verteilen. Die Load ist dann immer noch 2, die CPUs werden dabei aber zu 100% ausgelastet, das heißt, die beiden Programme rechnen nochmal doppelt so schnell.
    und weiter

    Ein Load Average von 0 sagt zum Beispiel aus, dass sämtliche Betriebsmittel zur Verfügung stehen und das System die Aufgaben eines Benutzers mit maximaler Geschwindigkeit bearbeiten kann. Eine einheitliche obere Grenze für den Load-Wert gibt es nicht. Je nach Anzahl der CPUs und anderen Betriebsmittel wie zum Beispiel vorhandener RAM gibt es jedoch in der Regel stets einen Wert, ab dem das System unbenutzbar wird, denn ein hoher Load Average-Wert wird durch viele gleichzeitig laufende Prozesse hervorgerufen, die Rechenzeit benötigen.
    und je nachdem was man selbst für einen vserver / root-server besitzt, kann es sein, dass die maschine bei einem load von 2-4 am ende angekommen ist. andererseits kann es je nach anwendung oder verwendetem kernel zu einem ganz anderen verhalten kommen, obwohl der load sogar höher ist. (1000fps kernel hat generell höheren load)

    und wenn das system von einem bruteforce angriff so dermaßen ausgelastet wird, sollte man sich gedanken machen, den ssh-port nur per port-knocking erreichbar zu machen und die logs von fail2ban oder denyhosts überwachen lassen, kostet zwar auch wieder leistung, aber ich hab lieber einen daemon der logs kontrolliert und suspekte IPs direkt aussperrt.



    //edit

    man könnte per top den idle wert auslesen und wenn dieser kleiner ist wie 10% die seite blocken

    Code:
    top -b -n 1 | grep Cpu | tr -s ' ' | cut -d" " -f 5 | cut -d"%" -f 1
    www.paid4.in - Hier gibt`s Klammlose ohne Ende!

  8. #8
    Erfahrener Benutzer Avatar von hankfromhelvete
    Registriert seit
    26.04.2007
    Beiträge
    633
    Hab den ersten Post mal aktualisiert. Am besten ist es wenn man erstmal einen Wert ermittelt, weil pauschal kann man es dann doch nicht sagen.

    Prozentuale Werte wären wirklich nicht schlecht. Müsste man nur gucken wie man das machen könnte.

  9. #9
    Erfahrener Benutzer Avatar von jpwfour
    Registriert seit
    06.02.2008
    Beiträge
    3.717
    Aber doch nicht in der PHP Anwendung bei jedem Aufruf die Prozessorauslatung auslesen. Wenn dann sollte sich der Apache oder das PHP Modul/CGI direkt darum kümmern, wobei ich mich eh frage, wie man es mit Webanwendungen schafft, die CPU auszulasten Normalerweise ist ja eher zu wenig RAM vorhanden.

    Mein Tipp: mit sar mitloggen lassen, und sollte die CPU mal ausgelastet sein, besseren Server holen
    Kill one man, and you are a murderer.
    Kill millions of men, and you are a conqueror.
    Kill them all, and you are a god.
    - Jean Rostand, Thoughts of a Biologist (1939)

  10. #10
    Benutzer
    Registriert seit
    25.04.2010
    Beiträge
    47
    über den sinn kann man sich natürlich streiten und "top -b" brauch auch recht lange bis die ausgabe kommt, je nach länge der prozessliste. das vbulletin hat auch so eine option drin, wenn der loadavg über X steigt, wird das forum geschlossen. ich halt davon net viel, wie du schon sagtest: wenns eng wird aufrüsten
    www.paid4.in - Hier gibt`s Klammlose ohne Ende!

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 22.02.2013, 18:20
  2. Automatischer Bannerwechsel im Header
    Von seg98 im Forum Support zum VMSone
    Antworten: 9
    Letzter Beitrag: 10.05.2010, 11:37
  3. Automatischer Paidmail versand
    Von Gecko1 im Forum Scripte
    Antworten: 12
    Letzter Beitrag: 20.03.2008, 21:00
  4. Einzahlen - DCC im Wartungsmodus?
    Von Rapper im Forum Support zum VMSone
    Antworten: 2
    Letzter Beitrag: 02.06.2007, 14:21
  5. Wartungsmodus
    Von florip im Forum Support zum VMSone
    Antworten: 4
    Letzter Beitrag: 07.01.2007, 23:05

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •