Alexander, W.: Serverausfall verhindern

Hallo,

ich suche ein Perl Script (bzw. Funktion), das folgendes macht:

Ab ca. 80% Serverauslastung kommt eine Meldung:

Server im Moment nicht erreichbar - bitte versuchen Sie es in 5 Sekunden noch einmal!

............ währendessen arbeitet der Apache erst mal die vorhandenen Befehle ab...... wenn das erledigt ist dann ist der Apache wieder errichbar..... nach ca. 5- 10 Sekunden.

Gruss Alex.

  1. 你好 Alexander,,

    Ab ca. 80% Serverauslastung kommt eine Meldung:

    Server im Moment nicht erreichbar - bitte versuchen Sie es in 5 Sekunden
    noch einmal!

    Vielleicht hilft dir RLimitCPU oder mod_loadavg bzw. mod_loadavg für Apache2.

    再见,
     CK

    --
    Der Mund ist das Portal zum Unglück.
    http://wwwtech.de/
  2. Moin!

    Hallo,

    ich suche ein Perl Script (bzw. Funktion), das folgendes macht:

    Im Prinzip suchst du mod_loadavg http://modules.apache.org/search?id=701. Dieses Apache-Modul verweigert (mit Status 503) einen Request, wenn der Load des Servers zu groß ist.

    Das Modul ist in C geschrieben, damit es nicht noch zusätzlich viel Performance frißt. Eine Lösung in Perl wäre nämlich nicht wirklich geeignet, da der Start eines Perl-Skripts meist den Start des Perl-Interpreters sowie das Parsen des Skriptes erfordert. Wenn dein Server also ohnehin schon gut ausgelastet ist, wäre das eher kontraproduktiv.

    Ab ca. 80% Serverauslastung kommt eine Meldung:
    Server im Moment nicht erreichbar - bitte versuchen Sie es in 5 Sekunden noch einmal!

    ErrorDocument 503 würde dir bei mod_loadavg helfen.

    - Sven Rautenberg

  3. Hi,

    auch auf die Gefahr das ich mich unbeliebt mache, gleichfalls geh ich davon aus dass der Content auf dem Server gewerblich ist und zu 100 % erreichbar sein sollte!

    Ich würd nich auf solche Scripte zurückgreifen! Scripte sind zur Überwachung recht net. Nur in deinem Fall (80 % Serverauslastung is schon recht ordentlich) würde ich mir entweder neue Hardware leisten oder einen zweiten Rechner danebenstellen und Load Balancing machen!

    Wenn du nämlich einen User nicht bedienen kannst (So nach dem Motto: Kommen Sie in fünf Minuten nochmal wieder!) war er höchstwarscheinlich das letzte Mal auf der Website.

    Bis denne

    Botix

    1. Hi,

      auch auf die Gefahr das ich mich unbeliebt mache, gleichfalls geh ich davon aus dass der Content auf dem Server gewerblich ist und zu 100 % erreichbar sein sollte!

      Ich würd nich auf solche Scripte zurückgreifen! Scripte sind zur Überwachung recht net. Nur in deinem Fall (80 % Serverauslastung is schon recht ordentlich) würde ich mir entweder neue Hardware leisten oder einen zweiten Rechner danebenstellen und Load Balancing machen!

      Wenn du nämlich einen User nicht bedienen kannst (So nach dem Motto: Kommen Sie in fünf Minuten nochmal wieder!) war er höchstwarscheinlich das letzte Mal auf der Website.

      100% Zustimmung!
      Die Fehlermeldung sollte ja sicher auch nur im Fehlerfall kommen (wenn der Server dann überhaupt noch in der Lage ist, etwas zu melden!).

      Im Vorfeld sollte man vielleicht selbst mal Messungen vornehmen. Z.B. damit.
      Um die Erreichbarkeit eine bestimmte Zeit zu testen, kann man einen externen Server nutzen, um Probleme zu sehen.

      Gruß
      Reiner

  4. Hallo Alex,

    ich suche ein Perl Script (bzw. Funktion), das folgendes macht:

    Ab ca. 80% Serverauslastung kommt eine Meldung:

    kopiere einfach mal zum Spaß eine 500 MB große Datei von a nach b und du wirst sehen, dass sich copy im regelfall eine ganze CPU von n CPU's krallt - wäre auch schlimm, wenn es nicht so wäre. :-)

    Herausfinden kannst du dies mit "top" oder "sar -x <pid> 1 1".

    80% besagt also zunächst nichts aus, ausser das darauf gearbeitet wird! Allerdings würde es schon anders aussehen, wenn der Server über längere Zeiträume hinweg zu 95-100% ausgelastet wäre, was sich auch stark bemerkbar machen würde.

    Server im Moment nicht erreichbar - bitte versuchen Sie es in 5 Sekunden noch einmal!

    ............ währendessen arbeitet der Apache erst mal die vorhandenen Befehle ab...... wenn das erledigt ist dann ist der Apache wieder errichbar..... nach ca. 5- 10 Sekunden.

    Der Wartezustand passiert ca. fünf Mal und ich würde die Seite nicht wieder besuchen, weil es mich tierisch stören würde!

    Optionen:

    a) Prozesse tunen
    b) mehr Leistung in den Server investieren

    beste Alternative: a+b :-)

    Aber um deine eigentliche Frage zu beantworten... du kannst sowas selber entwickeln! Auf jedem Unix/Linux Server sollte grundlegend das sysstat Paket installiert sein. In diesem Paket gibt es unter Anderem die Kommandos sar und mpstat, mit denen man die aktuelle CPU Leistung ausgeben lassen kann.

    my $data=qx{sar -u 1 1};

    gibt genau einen Intervall mit der Auslastung der CPU's, was so ausschaut:

    #>sar -u 1 1
    Linux 2.6.8-24.10-smp (lxipfm05)        08.01.2005

    01:03:25          CPU     %user     %nice   %system   %iowait     %idle
    01:03:26          all      0,00      0,00      0,00     26,63     73,37
    Durchschn.:       all      0,00      0,00      0,00     26,63     73,37

    Die Daten kann man ja zur Genüge auswerten und gegebenfalls eine Meldung generieren. Weitere Informationen zu den Kommandos sar, mpstat und iostat findest du in den Manpages:

    man sar
    man mpstat
    man iostat

    Ich hoffe ich konnte dir weiterhelfen.

    Viele Grüße,
    coolblue

    --

    never say oops after you submitted a job :-)
    _der_Ton_macht_die_Musik_!!!_