http://www.pronix.de -> Forum -> Administration, Konfiguration

Forum: Administration, Konfiguration

Moderatoren: Herb, Martin Conrad

Thema: Scheduler?

  • (nur registrierte Mitglieder)

Scheduler?

Patrick am 16.09.2005 um 12:07

Gegeben ist ein Host, auf dem irgendein Unix installiert ist.
Auf diesem Host läuft der Webserver Apache welcher Seiten und Skripte für UserA und UserB verarbeitet.
UserA hat eine sehr gut besuchte Website und so laufen permanent ca. 10000 Prozesse in seinem Namen.
UserB nutzt den Webserver nur wenige Male am Tag, legt aber Wert auf Geschwindigkeit.

Gibt es eine Möglichkeit, das beide User (vom Scheduler?) die selbe Prozessorzeit für Ihre Aufgaben zugewiesen bekommen, sollten Prozesse in beiden Namen ausgeführt werdeb?
Wenn ja, mit welchem Stichwort kann ich die Suchmaschinen füttern?

--
To follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.

 

Re: Scheduler?

broesel (webmaster) am 16.09.2005 um 12:49

Hi Patrick,

für 2.4.19 gab's einen Patch für fair user scheduling, aber wie das bei 2.6.x aussieht weiß ich nicht, weil ich seitdem kein Linux mehr benutzt habe.

Bei einem Verhältnis x:10000 mit x << 10000 kann es bei fair user scheduling aber erhebliche Probleme mit der Performance für UserA geben, je nach CPU-Last der Prozesse von UserB.

Nächstes Problem: wenn nicht jeder User seinen eigenen Webserver hat, kann man IMO die Prozesse sowieso nicht pro User unterscheiden.

My 2 Cents... Martin weiß wahrscheinlich mehr darüber Grafik: Smilie Gluecklich

Gruss,
Philip

--
The C Programming Quiz (externer link) - bitte Fragen einreichen :)

 

Re: Scheduler?

Patrick am 16.09.2005 um 14:57

Zitat:
Bei einem Verhältnis x:10000 mit x << 10000 kann es bei fair user scheduling aber erhebliche Probleme mit der Performance für UserA geben, je nach CPU-Last der Prozesse von UserB.

Ich habe keine Ahnung wie so ein Scheduler funktioniert und die Zahl 10000 ist auch nur ein Beispiel.
Vorgestellt hätte ich mir das so:

Alle Webserverprozesse vom User 1 in eine nach Priorität sortierte, verkettete Liste.
Alle Webserverprozesse vom User 2 in eine nach Priorität sortierte, verkettete Liste.
...
Alle Webserverprozesse vom User n in eine nach Priorität sortierte, verkettete Liste.
Angenommen n ist gleich 4, dann könnte der Scheduler jedem User 25% der verbleibenen Zeit auf der Zeitscheibe der CPU geben.

Im Moment scheint es so zu sein, das wenn UserA 1000 Prozesse hat und UserB nur einen, dem UserA insgesammt 1000 mal zu viel Rechenzeit zur Verfügung gestellt wird.
Das kann meiner Meinung nach auf einem Webserver, der von mehreren Webmastern genutzt werden, nicht richtig sein.


Zitat:
Nächstes Problem: wenn nicht jeder User seinen eigenen Webserver hat, kann man IMO die Prozesse sowieso nicht pro User unterscheiden.

Wenn ein Skript dem Besitzer UserA gehört, wird es doch auch in seinem Namen ausgeführt, Oder irre ich mich da?

Zitat:
My 2 Cents...

Danke Philip Grafik: Smilie Zwinker

--
To follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.

 

[EDIT] - Re: Scheduler?

Martin Conrad (webmaster) am 16.09.2005 um 19:19

Zitat:

Im Moment scheint es so zu sein, das wenn UserA 1000 Prozesse hat und UserB nur einen, dem UserA insgesammt 1000 mal zu viel Rechenzeit zur Verfügung gestellt wird.
Das kann meiner Meinung nach auf einem Webserver, der von mehreren Webmastern genutzt werden, nicht richtig sein.

1000 Prozesse sollten doch von jeder Maschine locker weggesteckt werden?
Zitat:
Zitat:
Nächstes Problem: wenn nicht jeder User seinen eigenen Webserver hat, kann man IMO die Prozesse sowieso nicht pro User unterscheiden.

Wenn ein Skript dem Besitzer UserA gehört, wird es doch auch in seinem Namen ausgeführt, Oder irre ich mich da?


Jein. mpm und suExec machens möglich.
In der Grundeinstellung laufen alle Prozesse mit der Kennung, die du in der User-Directive vom Häuptling eingetragen hast.

Diese Directiven sind für die Prozessverwaltung zuständig:
ThreadLimit
ServerLimit
StartServers
MaxClients
MinSpareThreads
MaxSpareThreads
ThreadsPerChild


Zusätzlich gibt es ab 1.2* auch noch die Directiven, mit denen du die cgi-Prozesse beschneiden kannst(gehen pro vhost):
RLimitCPU
RLimitNPROC
RLimitMEM


Ich hab keine Ahnung, ob die Sachen noch im 2er drin sind.

Kann es sein, dass nicht die 1000 Prozesse das Problem sind, sondern Scripte vom pösen User A?

Aber was anderes, User A braucht einen anderen Server.
Ich würd einen zweiten apache aufsetzen und per Portforwarding für den User zugängig machen. Diesen Apache kannst du dann mit nice oder anderen Sauereien mit niedrigerer Priorität laufen lassen. Aber normalerweise brauchst du das gar nicht. Schau mal nach, wie hoch die CPU-Last ist. Wenn die dauerhaft über 60% liegt, reicht deine HW nicht aus - egal was du konfigurierst.

Wenn sie niedriger liegt - 20% im Dauerbetrieb ist gesund, da ist noch genug Platz für Peaks - kannst du über die Prozessverwaltung vom Häuptling eine Menge rausholen.

Und kontrollier mal, ob es wirklich der Apache ist, der die Last erzeugt. Meistens dauern die Prozesse einfach zu lange, weil eine Datenbank nicht mehr nachkommt, oder php Ärger macht. Dort kannst du auch noch eine Menge schrauben.

Du meintes *irgendein* *nix.
Wenn du eine Apache in eine Jail baust und A geibst, kannst du die Jail mit niedriger Priorität starten und dann kann A machen was er will - Datenbanken Scripte, CGIs - er kriegt den Server dann nicht mehr klein. Aber das bedeutet dann FreeBSD.

Meine Meinung ist anber eh, dass das von hinten durch die Brust ins Auge wär. Wenn die Maschine überlastet ist sollte die Lösung in der Einfachheit liegen, um nicht noch mehr Last zu erzeugen.

Bis denne

Martin

EDIT: wahrscheinlich ist die CPU nicht dein Prob, sondern der Speicher. Schau dir mal squid an und überleg, ob es nicht sinnvoll wäre vor A einen Proxy zu hängen, der zumindest statischen Content cached.

Wenn die Seite zum Beispiel 40 kleine Grafiken fürs Layout läd bekommst du das so recht gut unter Kontrolle, weil dann der Apache nicht mehr pro Seitenaufruf 40 Anfragen bekommt.

--
0xC0FFEE

 

Re: Scheduler?

Patrick am 16.09.2005 um 20:47

Martin:

Zitat:
1000 Prozesse sollten doch von jeder Maschine locker weggesteckt werden?


Probleme habe ich bis jetzt auch noch nicht gehabt.
Nun scheint es aber so zu sein, das der Betreiber des Servers auf dem ich ein paar Megabyte gemietet habe auch gut besuchte Webchats erlaubt!
Ob so ein Host 1000 Prozesse für z.B. einen GT-Chat locker weg steckt, bezweifel ich Grafik: Smilie Zwinker

Zitat:
Kann es sein, dass nicht die 1000 Prozesse das Problem sind, sondern Scripte vom pösen User A?

Vermutlich ja.
Ich habe mich speziell für dieses Webpaket entschieden weil es keine Laufzeitbeschränkungen für meine Prozesse gibt und es super günstig ist.
Wenn jeder Webmaster hin und wieder wenige Prozesse laufen lässt, die etwas länger laufen und auch mal ein wenig mehr CPU Zeit brauchen, ist das meiner Meinung nach OK.
Chats wie z.B. der GT-Chat haben aber nichts auf einem solchen Rechner zu suchen, es sei denn der Rechner teilt seine freie Rechenzeit durch die Anzahl der zahlenden Kunden und nicht durch deren Prozesse.

Zitat:
Aber was anderes, User A braucht einen anderen Server.

Speziell in meinem Fall denke ich genau so. Ich glaube aber nicht, dass der Betreiber des Webservers das genau so sieht *g*
Deine Idee, CGI´s eines jeden Vhosts per suexec zu beschneiden, klingt jedenfalls schon recht interessant.
Wenn alle Stricke reissen, suche ich mir halt einen neuen Anbieter und komme vieleicht doch noch auf dein Angebot zurück Grafik: Smilie Zwinker

--
To follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.

 
  • (nur registrierte Mitglieder)