Hallo,
ich habe mal eine Frage:
Wieso hat der apache 2 unter top bei vielen Anfragen nur einen Prozess unter laufen? Es handelt sich um eine dual-prozessor maschine und ich habe das gefühl, dass die beiden Prozessoren nicht beide voll ausgelastet werden, sondern dass er immer zwischen den beiden prozessoren hin und her springt.
bei ner single Prozessor maschine, die ich hier habe läuft noch der apache 1.3. Da werden allerdings wesentlich mehr apache prozesse gestartet.
Die conf files für den apache sind bei beiden maschinen etwa gleich (Startservers, maxrequestPerChild, MaxClients etc.).
Ist das normal? Sollten nicht eigentlich beide prozessoren bei vielen rechenintensiven prozessen die ganze Zeit voll ausgelastet sein?
Oder muss ich den apache dafür speziell konfigurieren (multi-prozessor)?
MfG und vielen Dank vorab für eure Antworten!
server.local
Apache 2 -> warum nur ein Prozess unter top
Re: Apache 2 -> warum nur ein Prozess unter top
Mit welchem MPM wurde dein Indianer denn compilt?Wieso hat der apache 2 unter top bei vielen Anfragen nur einen Prozess unter laufen?
Kannst du checken mit
Code: Select all
httpd -lSiehe http://httpd.apache.org/docs-2.0/mod/
Wenn du willst, dass sich dein Apache 2 ziemlich ähnlich zum Apache 1.3 verhält, solltest du "prefork" wählen. Eventuell hast du im Moment aber "worker", d.h. ein einzelner Prozess kann mehrere Threads haben und damit auch mehrere Clients bedienen. In diesem Fall wäre es natürlich unnötig und sogar ineffizient, für jeden Client-Request einen einzelnen Prozess zu erzeugen, denn Prozesse zu erzeugen ist deutlich "teurer" als Threads zu erzeugen.
Wie so meist, würde ich einfach mal davon ausgehen, dass dein Apache das schon je nach Bedarf am besten handeln wird (vorausgesetzt, du hast ihn nicht total verkonfiguriert ;)).
Wie ist denn so die Performance, während dieser gleichzeitigen Anfragen und nur einem Prozess? Schlechter als mit Apache 1.3? Wahrscheinlich ja nämlich nicht, oder? Also solltest du dir auch keine unnötigen Sorgen machen. IMHO.
Nein. Egal, ob jetzt prefork oder worker, das OS (wohl Linux) sorgt dafür, dass sowohl verschiedene Prozesse als auch Threads auf die einzelnen CPUs verteilt werden.Oder muss ich den apache dafür speziell konfigurieren (multi-prozessor)?
Ob Linux dafür (SMP) jetzt allerdings das Optimum ist, darüber lässt sich streiten. Ich hatte dazu mal einen äusserst interessanten Vortrag auf dem Linuxtag letztes Jahr gehört.
-
server.local
- Posts: 17
- Joined: 2002-09-18 11:00
Re: Apache 2 -> warum nur ein Prozess unter top
Hi,
und danke für deine Antwort.
httpd -l sagt
Also sollte sich deiner Aussage nach der Apache 2 ähnlich wie der Apache 1.3 verhalten.
Ich kann die Performance leider nicht 1:1 vergleichen, da auf beiden Servern unterschiedliche Dienste laufen bzw. der dual-server wesentlich mehr zu arbeiten hat, da hier ein ganz anderes projekt läuft (rechenintensive PHP Scripts und große MySQL Tabellen mit über 50.000 Datensätzen). Auf dem single Rechner laufen kaum mySQL abfragen o.ä
Load wächst bei vielen Statistik Aufrufen zu Stoßzeiten schonmal auf 3 oder höher. Normalerweise allerdings zwischen 0,3 und 0,6....
(dual-server: dual PIII 1Ghz mit 2 x SCSI 320 Platten als raid1, single server: single 1Ghz mit 2 x IDE 7200er Platten als raid1).
Welches Tool ist zu empfehlen, um die Auslastung/Performance des Server zu loggen (CPU/RAM/HDD/SWAP/TCP etc). MRTG? oder gibt es da noch andere schöne tools? Denn top zeigt ja nur den load average der letzten 5/10/15 minuten und die aktuelle Memory/Prozessor Usage...
natürlich könnte ich jetzt auch wieder mit PHP und shellscripten loslegen, aber warum das Rad neu erfinden?
verkonfiguriert habe ich nichts, ist alles noch standard Konfiguration, bis auf die VirtualHosts und einige andere kleine Variablen (User, Module etc.) versteht sich...
Ich werde mal ein bißchen mit der Konfiguration herumspielen, um zu sehen wie der Server am meisten Performance hat. Gibt da auch watt feines? Vielleicht ein Tool, mit dem ich n simultane Zugriffe auf bestimmte Dateien / Dienste des Servers simulieren kann, um die Performance besser testen zu können? Der Server ist nämlich noch nicht in Produktivphase. Ich möchte erst alles genau testen und ggf. optimieren. Die 50.000 Datensätze wurden per PHP testweise geschrieben, um Bugs zu finden und die Performance zu testen.
Vielen Dank und liebe Grüße an alle
server.local
und danke für deine Antwort.
httpd -l sagt
Code: Select all
[...]
prefork.c
[...]
Ich kann die Performance leider nicht 1:1 vergleichen, da auf beiden Servern unterschiedliche Dienste laufen bzw. der dual-server wesentlich mehr zu arbeiten hat, da hier ein ganz anderes projekt läuft (rechenintensive PHP Scripts und große MySQL Tabellen mit über 50.000 Datensätzen). Auf dem single Rechner laufen kaum mySQL abfragen o.ä
Load wächst bei vielen Statistik Aufrufen zu Stoßzeiten schonmal auf 3 oder höher. Normalerweise allerdings zwischen 0,3 und 0,6....
(dual-server: dual PIII 1Ghz mit 2 x SCSI 320 Platten als raid1, single server: single 1Ghz mit 2 x IDE 7200er Platten als raid1).
Welches Tool ist zu empfehlen, um die Auslastung/Performance des Server zu loggen (CPU/RAM/HDD/SWAP/TCP etc). MRTG? oder gibt es da noch andere schöne tools? Denn top zeigt ja nur den load average der letzten 5/10/15 minuten und die aktuelle Memory/Prozessor Usage...
natürlich könnte ich jetzt auch wieder mit PHP und shellscripten loslegen, aber warum das Rad neu erfinden?
verkonfiguriert habe ich nichts, ist alles noch standard Konfiguration, bis auf die VirtualHosts und einige andere kleine Variablen (User, Module etc.) versteht sich...
Ich werde mal ein bißchen mit der Konfiguration herumspielen, um zu sehen wie der Server am meisten Performance hat. Gibt da auch watt feines? Vielleicht ein Tool, mit dem ich n simultane Zugriffe auf bestimmte Dateien / Dienste des Servers simulieren kann, um die Performance besser testen zu können? Der Server ist nämlich noch nicht in Produktivphase. Ich möchte erst alles genau testen und ggf. optimieren. Die 50.000 Datensätze wurden per PHP testweise geschrieben, um Bugs zu finden und die Performance zu testen.
Vielen Dank und liebe Grüße an alle
server.local
Re: Apache 2 -> warum nur ein Prozess unter top
Das ist doch gerade eine der großen Neuerungen vom Apache2! Während
der Apache 1.3 noch für jeden Request/Verbindung ein komplettes fork()
aufruft macht der Apache2 nur noch Threads auf... Da Threads keine
'echten' eigenständigen Prozesse sind sieht man die auch nicht mit top...
Die Idee, den Apache wieder mit prefork arbeiten zu lassen, halte ich nicht
unbedingt für sehr glücklich da ein Thread wesentlich weniger Resourcen
benötigt, als ein ge-forkter Prozess (bei einem fork() wird eine exakte Kopie
des Parent-Prozesses angelegt - jeder fork-Prozess belegt also die gleiche
Menge Speicher wie sein Parent und es dauert auch länger, einen neuen
Prozess mit fork() zu erzeigen als einen Thread).
Und zu der SMP-Auslastung: der Linux-Kernel verteilt Threads auf alle
vorhandenen Threads...
der Apache 1.3 noch für jeden Request/Verbindung ein komplettes fork()
aufruft macht der Apache2 nur noch Threads auf... Da Threads keine
'echten' eigenständigen Prozesse sind sieht man die auch nicht mit top...
Die Idee, den Apache wieder mit prefork arbeiten zu lassen, halte ich nicht
unbedingt für sehr glücklich da ein Thread wesentlich weniger Resourcen
benötigt, als ein ge-forkter Prozess (bei einem fork() wird eine exakte Kopie
des Parent-Prozesses angelegt - jeder fork-Prozess belegt also die gleiche
Menge Speicher wie sein Parent und es dauert auch länger, einen neuen
Prozess mit fork() zu erzeigen als einen Thread).
Und zu der SMP-Auslastung: der Linux-Kernel verteilt Threads auf alle
vorhandenen Threads...