Dlaczego Apache obsługuje tak wiele procesów? Nadmiar pamięci RAM tutaj?

17

Zauważyłem, że Apache uruchamia wiele procesów na moim serwerze LAMP (ubuntu 10.10). Właśnie uruchamiam witrynę Wordpress z MySQL jako bazą danych. Wygląda na to, że www-data uruchamia apache2 bardziej niż powinien (zużywając zbyt dużo pamięci), czy mam rację:

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
źródło
To samo dotyczyło mojej poprzedniej pracy (CentOS). Po prostu założyłem, że wszystkie procesy potomne rozpoczynają proces apache dla każdego żądania. Z tego powodu nigdy nie napotkaliśmy problemów z wydajnością / pamięcią ...
Nandhini Anand
Hmm Martwię się tylko o brak pamięci w tym systemie, ponieważ jest to VPS.
Trent Scott

Odpowiedzi:

19

Apache uruchamia wiele procesów, aby były gotowe, gdy nadejdzie żądanie klienta. Odradzanie procesu serwera jest powolne, więc najlepiej mieć jeden czekający na klienta.

Przy korzystaniu z pamięci należy wziąć pod uwagę rozmiar RES (wyświetlany u góry), czyli ilość pamięci fizycznej wykorzystywanej przez zadanie.

Jak myślisz, dlaczego masz zbyt wiele procesów Apache2 zużywających zbyt dużo pamięci? Czego oczekujesz? Dlaczego tego oczekujesz?

Paweł Brodacki
źródło
To jest obraz oparty na chmurze. Wygląda na to, że zużywa więcej pamięci niż powinna w przypadku tak małej witryny. Rzeczywista pamięć: łącznie 496,36 MB / 92,02 MB wolnej przestrzeni wymiennej: 1024 MB ogółem / 975,93 MB wolnej
Trent Scott
1
@Trenton: Z odpowiedzią Pawla brzmi dobrze. O ile nie wpadniesz w awarię MySQL lub coś z powodu braku pamięci, wszystko powinno być w porządku. Jeśli tak się stanie, powinieneś poszukać konfiguracji apache, aby ograniczyć te odradzane procesy.
Nandhini Anand
2
Linux będzie próbował zachować większość używanej pamięci. Jeśli nie ma nic więcej do dodania, użyje pamięci RAM dla buforów pamięci podręcznej i dysków. Pusta pamięć to zmarnowana pamięć (jeśli nie zabraknie pamięci RAM).
Paweł Brodacki
3

Jak wyjaśnia odpowiedź Pawła, apache używa modelu proces na żądanie z pulą procesów (lub wątek na żądanie z mpm_worker).

Możesz być w stanie zmniejszyć zużycie pamięci, używając serwera WWW opartego na nieblokującym We / Wy, takiego jak nginx. W ten sposób serwer nie musi poświęcać procesu / wątku na połączenie.

janneb
źródło
2

Apache uruchomi tyle procesów, ile skonfigurujesz. W konfiguracji różni się w przypadku korzystania z prefork lub pracownik moduły multi-processing.

Sciurus
źródło