Apache - Sehr hohe Speicherlast

Olodin

Reading User
Hallo,

ich hab hier nen Apache für eine kleine Intranet Seite und Webmail. Bin gerade am testen, weil ich den Server von Linux auf Freebsd umstelle. Dabei ist mir der unerklärlich hohe Speicherverbrauch auf dem neuen Freebsd System aufgefallen:

Code:
  PID USERNAME PRI NICE   SIZE    RES STATE    TIME   WCPU    CPU COMMAND
 6822 www       20    0 17192K 13156K lockf    0:14  0.00%  0.00% httpd
 6823 www       20    0 14188K 10148K lockf    0:02  0.00%  0.00% httpd
 6790 www       20    0 14052K 10100K lockf    0:04  0.00%  0.00% httpd
 6821 www        4    0 13728K  9784K select   0:03  0.00%  0.00% httpd
 6789 www       20    0 13724K  9784K lockf    0:04  0.00%  0.00% httpd
 5223 nobody    96    0 11724K 10844K select   0:06  0.00%  0.00% squid
 5381 root      96    0  9584K  5204K select   0:01  0.00%  0.00% httpd

Im error.log gibts auch nix ungewöhnliches:
Code:
[Sat Jun 12 15:11:36 2004] [notice] Apache/1.3.29 (Unix) PHP/4.3.4 mod_ssl/2.8.16 OpenSSL/0.9.7c configured -
- resuming normal operations

Das ganze läuft auf einem FreeBSD 5.2.1, VIA C3 533Mhz, 256MB Ram.

Auf meinem alten Linux System braucht so ein httpd Prozess ~1MB. Der gesamte Speicherverbauch liegt dort im Idle bei ~65MB

Auf dem FreeBSD im Idle bei ~220MB!

Irgendwelche Ideen?
 
Ich hab jetzt PHP und Apache auf dem aktuellen Stand und mal testweise 256MB dazugesteckt: Gleiches Ergebnis

Code:
Mem: 66M Active, 320M Inact, 68M Wired, 23M Cache, 60M Buf, 14M Free
Swap: 513M Total, 20K Used, 513M Free

  PID USERNAME PRI NICE   SIZE    RES STATE    TIME   WCPU    CPU COMMAND
  593 nobody    96    0 26528K 25612K select   1:16  0.00%  0.00% squid
11341 www        4    0 12432K 10260K select   0:11  0.00%  0.00% httpd
11372 www       20    0 12396K 10264K lockf    0:19  0.00%  0.00% httpd
11340 www       20    0 11660K  9544K lockf    0:21  0.00%  0.00% httpd
  606 root      96    0  7000K  4380K select   0:10  0.00%  0.00% httpd

In diversen Newsgroups find ich ähnliche Probleme, vor allem wenns um neuere PHP Versionen geht. Hat noch niemand hier ähnliche Erfahrungen gemacht?

Nur mal ein kurzer Screenshot von phpsysinfo:
 
Zuletzt bearbeitet:
Ja, habe ich auch.
Bei mir ist's sogar so, daß alle Apache-Prozesse zusammen deutlich mehr Speicher "verbrauchen" als zur Verfügung steht.
Also tippe ich da mal auf a) einen Bug beim Anzeigen des Speichers oder b) daß der Maximalwert an Speicher angezeit wird, der irgendwann mal von dem Prozess benutzt wurde.

Solang die Kiste nicht swappt, ist die Welt in Ordnung ;)

Der Indy
 
indy schrieb:
Ja, habe ich auch.
Bei mir ist's sogar so, daß alle Apache-Prozesse zusammen deutlich mehr Speicher "verbrauchen" als zur Verfügung steht.
Also tippe ich da mal auf a) einen Bug beim Anzeigen des Speichers oder b) daß der Maximalwert an Speicher angezeit wird, der irgendwann mal von dem Prozess benutzt wurde.

Afaik hängt das mit den child-prozessen zusammen, die httpd so spawned. Top zeigt dann für jeden child einzeln Speicher an, obwohl die physikalisch auf den gleichen Speicher zugreifen.


Solang die Kiste nicht swappt, ist die Welt in Ordnung ;)

Der Indy

Stimmt. :) Fand nur und vor allem den Unterschied zu der alten Linux-Büchse gewaltig. Vor allem, weil ich auch nicht genau weiss, was passiert, wenn ein anderer Dienst mal wieder Speicher brauch. Wird der dann direkt freigegeben?
 
also deinen screenshot kenn ich von meiner alten linux büchse.
da wurde der gesamte speicher einfach mal rigeros als belegt angezeigt.
de facto ist er aber "nur reserviert" sprich innen drin hohl und wird nach bedar den programmen zugeteilt. sprich du hast immer zB 90% speicherauslastung, von denen intern aber nur 20% verbraucht werden.

wird bei FreeBSD auch so sein, apache is ja das gleiche ;).
 
Stevil schrieb:
also deinen screenshot kenn ich von meiner alten linux büchse.
da wurde der gesamte speicher einfach mal rigeros als belegt angezeigt.
de facto ist er aber "nur reserviert" sprich innen drin hohl und wird nach bedar den programmen zugeteilt. sprich du hast immer zB 90% speicherauslastung, von denen intern aber nur 20% verbraucht werden.

wird bei FreeBSD auch so sein, apache is ja das gleiche ;).

Ich hab mir eben auf der Autofahrt von der Arbeit nach Hause auch nochmal Gedanken gemacht. 320MB inactive in der Anzeige von top, da muss ja was mit gemacht werden können. Ich geh mal von aus, dass dieser hohe Speicherverbrauch einfach ein Anzeigeproblem und ehr ein Schönheitsfehler ist. Ignorier ich also erst einmal, zumal ich in keinen Logs irgendwelche Fehlermeldung finde.

Aber eins bleibt: ein einzelner httpd Prozess braucht auf dem neuen System mehr als 10mal so viel, wie auf der alten Büchse. Mal schaun, ob ich den Apache noch irgendwie schlanker bekomme...
 
Olodin schrieb:
Ich hab mir eben auf der Autofahrt von der Arbeit nach Hause auch nochmal Gedanken gemacht. 320MB inactive in der Anzeige von top, da muss ja was mit gemacht werden können. Ich geh mal von aus, dass dieser hohe Speicherverbrauch einfach ein Anzeigeproblem und ehr ein Schönheitsfehler ist. Ignorier ich also erst einmal, zumal ich in keinen Logs irgendwelche Fehlermeldung finde.

Aber eins bleibt: ein einzelner httpd Prozess braucht auf dem neuen System mehr als 10mal so viel, wie auf der alten Büchse. Mal schaun, ob ich den Apache noch irgendwie schlanker bekomme...

Update: Die Kiste läuft jetzt wieder mit 256MB Speicher. Die Anzeige in top und phpsysinfo ist die alte geblieben.

Da der Server ohne Probleme läuft und bis jetzt noch keine Fehlermeldungen in den Logs aufgetreten sind, ist das ganze wohl einfach ein optischer Makel.
 
Hi,

prüfe mal folgende Einträge in der httpd.conf:
MaxRequestsPerChild
MaxSpareServers
MinSpareServers

Falls MaxRequestsPerChild auf 0 gesetzt ist weise mal einen anderen Wert zu.

MaxSpareServers gibt die Anzahl der idle child server processe an. Dieser Wert sollte nicht zu hoch gewählt sein.

MinSpareServers gibt die minimale Anzahl der idle child server processe an. Dieser Wert sollte ebenfalls nicht zu hoch gewählt sein.

Beim Apache 1.3.31 mit mod_php 4.3.7 hat die Anpassung der oben genannten Werte geholfen.

Gruß Bummibaer
 
Weiss ja nicht wieviel Datenverkehr Du schon ueber die Leitung jagst, aber eventuell bau das Ding doch mal von Hand. Klar sagt man immer, ports sind besser, aber bei einzelnen Diensten (Apache und MySQL) brachte eine Menge was die Performance anbelangt.

Bei mir waren das Server die ueber 200 GB ueber Port 80 pro Monat bewaeltigen...

Und das wichtigste ist, was willst Du denn mit FreeBSD 5.x? ;)
 
Bummibaer schrieb:
Hi,

prüfe mal folgende Einträge in der httpd.conf:
MaxRequestsPerChild
MaxSpareServers
MinSpareServers


Steht auf folgenden Werten

Code:
MaxRequestsPerChild 500
MinSpareServers 1
MaxSpareServers 2


till schrieb:
Weiss ja nicht wieviel Datenverkehr Du schon ueber die Leitung jagst, aber eventuell bau das Ding doch mal von Hand. Klar sagt man immer, ports sind besser, aber bei einzelnen Diensten (Apache und MySQL) brachte eine Menge was die Performance anbelangt.

Bei mir waren das Server die ueber 200 GB ueber Port 80 pro Monat bewaeltigen...

War vielleicht nicht ausführlich genug, über den Einsatzzweck des Servers: Vor allem Webmail und Linksammlung für mich und meine Freundin an einer DSL Leitung. Also nix mit grossem Upstream... :)

Apache halt, weil ich mich so etwas austoben kann und nebenbei diverse Sachen testen kann, dich auch für die Arbeit brauch.


till schrieb:
Und das wichtigste ist, was willst Du denn mit FreeBSD 5.x?

Will mich möglichst früh mit dem neuen production release ausseinandersetzen ;)
 
Zurück
Oben