Andreas: Maximalen Ressourcenverbrauch für Scripte beschränken

Hi,

auf meinem Server laufen diverse Perl-Scripte. Einige werden im Hintergrund jede Minute ausgeführt (Serverscripte), andere sind CGIs für eine Webseite (Benutzerscripte).

Jetzt ist es so, dass die Benutzerscripte zeitweise nur sehr langsam ausgeführt werden können, weil die Serverscripte im Hintergrund gerade (viel zu) viel zu tun haben und sämtliche Serverressourcen für ein paar Minuten gepachtet haben.

Optimal wäre es, wenn die Benutzerscripte immer die maximal verfügbaren Serverressourcen nutzen dürften, um den Benutzern die maximale Performance zur Verfügung zu stellen. Die Serverscripte laufen sowieso im Hintergrund und sollten sich dann maximal mit 20% der Serverressourcen begnügen - das reicht völlig aus, wenn die irgendwann mal mit der Arbeit fertig werden.

Weiss zufällig jemand, wie ich das mit SuSE Linux anstellen könnte?

Ich habe schon versucht in den Scripten mit sleep() die Ressourcen zwischendurch mal für ein paar Sekunden freizugeben. Aber das ist auf Dauer auch keine Lösung. Da wird man ja wahnsinnig beim Scripten......ständig sleep()... Und außerdem wird die maximale Serverauslastung auch nur auf kürzere Intervalle verteilt - also keine echte Lösung für dieses Problem. Das muss doch auch bequemer gehen, oder nicht?

Ciao
Andreas

PS: Mit Serverressourcen meine ich im Großen und Ganzen die CPU - der Arbeitsspeicher macht mir weniger Sorgen...

  1. hi,

    Ich habe schon versucht in den Scripten mit sleep() die Ressourcen zwischendurch mal für ein paar Sekunden freizugeben. Aber das ist auf Dauer auch keine Lösung. Da wird man ja wahnsinnig beim

    Doch das ist eine Lösung: Damit verhinderst du dass deine PERL Scripts alle gleichzeitig gestartet werden. So einen ähnlichen Fall hatte ich auch mal: Alle 5 min sollten mehrere Prozesse (MRTG) ablaufen, per sh-Script wurden die alle fast zur gleichen Zeit gestartet und in den Hintergrund geschickt, das Resultat: > 1.000 Prozesse auf der Kiste, CPU würg...

    Lösung:
    nach jedem Start eines MRTG - Prozesse eine sekunde sleep;

    Gruß, Rolf

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
    1. Hi,

      das ist schon richtig. Vorausgesetzt, es geht um viele Scripte, die zur gleichen Zeit gestartet werden. Ich habe aber das Problem, dass nur ein Script die CPU würgt und ein zweites Script dadurch seeehr langsam wird. Die Prozessliste ist noch im grünen Bereich. Wie kann ich dem würgenden Script von Anfang an sagen, dass es die CPU nicht gleich töten soll?

      Ciao
      Andreas

  2. Hi,

    Optimal wäre es, wenn die Benutzerscripte immer die maximal verfügbaren Serverressourcen nutzen dürften, um den Benutzern die maximale Performance zur Verfügung zu stellen. Die Serverscripte laufen sowieso im Hintergrund und sollten sich dann maximal mit 20% der Serverressourcen begnügen - das reicht völlig aus, wenn die irgendwann mal mit der Arbeit fertig werden.

    Weiss zufällig jemand, wie ich das mit SuSE Linux anstellen könnte?

    Mit Linux? Welche Version?
    Aber zuvor noch die allgemeinen Tips:

    man nice
     Herunter- und Heraufsetzen der Priorität am Scheduler.
     Raufsetzen nur mit Rootrechten.
    man ulimit
     (shellbuildin bei SuSE, also gibt's die Bashmanpage, einfach suchen)
     Hier läßt sich die maximale CPU-Zeit einstellen. Das ist aber wohl
     zu brutal für Deine Zwecke.

    Würde hier am besten 'nice' empfehlen.  Alles andere erfordert Änderungen am Schedulercode. Nicht unbedingt empfehlenswert.
    Wenn Du die Benutzerscripte hochsetzen willst, geht das ja nur mit Rootrechten, also sorge dafür, das der Interpreter direkt nach dem Aufruf die Rootrechte abgibt. Am Besten: laß das Heraufsetzen ganz ;-)

    Es gibt je nach Linuxversion (Linux == Kernel) auch andere Möglichkeiten, aber dafür müßte ich die erstmal wissen.

    so short

    Christoph Zurnieden

    1. Hi,

      danke für die Tipps, werd' ich mir auf jeden Fall mal alles ansehen! Die Linux Version ist

      Linux version 2.4.20 (root@fileserv1) (gcc version 2.95.3 20010315 (SuSE)) #1 Fri Jan 10 14:56:55 MET 2003

      Ciao
      Andreas

      1. Hi,

        danke für die Tipps, werd' ich mir auf jeden Fall mal alles ansehen! Die Linux Version ist

        Linux version 2.4.20 (root@fileserv1) (gcc version 2.95.3 20010315 (SuSE)) #1 Fri Jan 10 14:56:55 MET 2003

        Ah, ein 2.4er, dann ist da nichts Sinnvolles mehr möglich. zumindest nicht ohne Riesenaufwand.
        Du könntest auch an den Scripten feilen. Aber das ist natürlich auch ein rechter Aufwand.
        Probier einfach mal 'nice' und wenn das nicht reicht, dann schauen wir weiter.

        BTW: interessant, das SuSE immer noch den 2.95.3er GCC draufhat.

        so short

        Christoph Zurnieden