Warum führt Apache so viele Prozesse aus? Übermäßiger RAM hier?

17

Ich stelle fest, dass Apache auf meinem LAMP-Server (Ubuntu 10.10) mehrere Prozesse ausführt. Ich betreibe gerade eine Wordpress-Site mit MySQL als Datenbank. Es scheint, als ob www-data Apache2 mehr ausführt, als es sollte (auch wenn es zu viel Speicher benötigt), habe ich Recht:

ID      Owner       Size        Command   
31200   www-data    251236 kB   /usr/sbin/apache2 -k start
20678   www-data    250948 kB   /usr/sbin/apache2 -k start
25781   www-data    248888 kB   /usr/sbin/apache2 -k start
31045   www-data    248844 kB   /usr/sbin/apache2 -k start
19926   www-data    246480 kB   /usr/sbin/apache2 -k start
20749   www-data    239380 kB   /usr/sbin/apache2 -k start
32616   www-data    238632 kB   /usr/sbin/apache2 -k start
8846    mysql   238128 kB   /usr/sbin/mysqld
24178   www-data    234228 kB   /usr/sbin/apache2 -k start
32618   www-data    232344 kB   /usr/sbin/apache2 -k start
32615   www-data    232204 kB   /usr/sbin/apache2 -k start
19805   root    208156 kB   /usr/sbin/apache2 -k start
Trent Scott
quelle
Dies war auch bei meinem vorherigen Job (CentOS) der Fall. Ich habe nur angenommen, dass es sich bei allen Prozessen um untergeordnete Prozesse handelt, bei denen Apache bei jeder Anforderung gestartet wird. Aus diesem Grund gab es jedoch keine Performance- / Speicherprobleme ...
Nandhini Anand
Hmm. Ich mache mir nur Sorgen, dass auf diesem System nicht mehr genügend Arbeitsspeicher zur Verfügung steht, da es sich um ein VPS handelt.
Trent Scott

Antworten:

19

Apache führt mehrere Prozesse aus, um sie bei Eingang einer Client-Anfrage bereit zu halten. Das Starten eines Server-Prozesses ist langsam. Es ist daher am besten, wenn einer auf einen Client wartet.

Für die Speichernutzung sollten Sie die RES-Größe (wie oben angezeigt) berücksichtigen, dh die Menge des von der Aufgabe verwendeten physischen Speichers.

Warum haben Sie Ihrer Meinung nach zu viele Apache2-Prozesse, die zu viel Speicher belegen? Was erwartest du? Warum erwartest du das?

Paweł Brodacki
quelle
Dies ist ein Cloud-basiertes Image. Es scheint nur so, als würde mehr Speicher für eine so kleine Site verwendet, als es sollte. Realer Speicher: 496,36 MB gesamt / 92,02 MB frei Auslagerungsspeicher: 1024 MB gesamt / 975,93 MB frei
Trent Scott
1
@Trenton: Mit Pawels Antwort hört sich das gut an. Es sei denn, Sie stoßen tatsächlich auf einen MySQL-Absturz oder auf etwas, das auf Speichermangel zurückzuführen ist. In diesem Fall sollten Sie nach Apache-Konfigurationen suchen, um diese hervorgerufenen Prozesse einzuschränken.
Nandhini Anand
2
Linux wird versuchen, den Großteil des verwendeten Speichers zu behalten. Wenn es nichts anderes gibt, wird RAM für Cache- und Festplattenpuffer verwendet. Leerer Speicher ist verschwendeter Speicher (wenn Ihnen nicht der Arbeitsspeicher ausgeht).
Paweł Brodacki
3

Wie die Antwort von Pawel erklärt, verwendet Apache ein Prozessmodell pro Anforderung mit einem Prozesspool (oder einen Thread pro Anforderung mit mpm_worker).

Möglicherweise können Sie die Speichernutzung reduzieren, indem Sie einen Webserver verwenden, der auf nicht blockierenden E / A-Vorgängen basiert, z. B. nginx. Auf diese Weise muss der Server keinen Prozess / Thread pro Verbindung zuweisen.

Janneb
quelle
2

Apache führt so viele Prozesse aus, wie Sie es konfigurieren. Die Konfiguration unterscheidet sich, wenn Sie die Prefork- oder Worker- Multi-Processing-Module verwenden.

Sciurus
quelle