Proces Apache „httpd”, wykorzystujący całą pamięć moich serwerów

9

Moja mała instancja ec2 z pamięcią 1,7 GB, działająca na Amazon AMI opartej na CentOS, ma problem z tym, że Apache wykorzystuje zbyt dużo pamięci, niż powinna. Jeśli spojrzysz na zrzut ekranu, użycie pamięci wyniesie 90-100%, dopóki nie zrestartuję usługi httpd, gdzie zacznie się od nowa, zwiększając jej drogę powrotną do 90+%.

wprowadź opis zdjęcia tutaj

Byłbym bardzo wdzięczny za pomoc w zlokalizowaniu problemu. Czy to może być „normalne” zachowanie apache, aby wykorzystać całą dostępną pamięć? A może jest jakiś wyciek, który muszę wytropić. W tej chwili jestem trochę zakłopotany tym, co może się dziać.

Używamy prefabrykatu Apache MPM, a nie SQL ani niczego podobnego - po prostu apache. Strona jest tutaj .

Amivit
źródło
1
Wygląda na to, że nie używa żadnej zamiany, więc w czym problem?
HTTP500
Czy fakt, że wykorzystuje tak dużo pamięci, nie powinien być problemem? Przepraszam za moje doświadczenie dla początkujących, myślę, że może to być błędne założenie. Może to normalne zachowanie i że Apache jest zaprojektowany tak, aby wykorzystywał całą pamięć, jaką może pobrać, mimo że jest to strona o małym natężeniu ruchu?
Amivit,
1
Zauważyłem, że używasz NewRelic, który może również rejestrować czas spędzony w Apache (może być pomocny), jeśli dodasz ten wiersz do httpd conf: RequestHeader set X-Request-Start "%t"jeśli jeszcze tego nie zrobiłeś. Pojawi się to jako „Kolejkowanie żądań” po przejściu do App Server> Omówienie - może pomóc w osiągnięciu sedna problemu.
KM.

Odpowiedzi:

8

Jak powiedział HTTP500, prawdopodobnie nie powinieneś się tym martwić, chyba że maszyna faktycznie się dusi. Spójrz na Pomoc! Linux Ate My RAM! . Nie jest to do końca analogiczna sytuacja, ponieważ masz procesy zamiast buforów zajmujących pamięć RAM, ale nie jest to zbyt odległe: fizyczna pamięć RAM komputera jest zasobem do użycia, zarówno z buforami jądra, jak i wolnymi procesami roboczymi Apache, aby szybko obsłużyć przychodzące upraszanie. Jeśli nie używasz pamięci RAM, przepłaciłeś za rozmiar swojego pudełka.

W każdym razie, jeśli chcesz grać z ustawieniami MPM, dokumentacja Apache to http://httpd.apache.org/docs/current/mod/prefork.html

Być może możesz zmniejszyć MinSpareServers, StartServers itp., Ponieważ stwierdziłeś, że witryna ma mały ruch. Będziesz wtedy miał więcej wolnej pamięci RAM do wykorzystania przez bufory jądra dla ich niecnych celów.

cjc
źródło
4

Linux wykorzystujący całą twoją pamięć jest normalny, pamięć, która nie jest używana, w przeciwnym razie zostanie ponownie wykorzystana jako pamięć podręczna dysku. patrz: linux zjadł mojego barana

Możesz to sprawdzić, patrząc na dane wyjściowe free -mi spodziewać się czegoś takiego:

             total       used       free     shared    buffers     cached
Mem:          7889       6887        101          0        106       2307
-/+ buffers/cache:       5373       3416
Swap:         1903         17       1886

+/- linia buforów / pamięci podręcznej jest tym, czego potrzebujesz. Dodaje pamięci podręcznej pamięci RAM, aby dać ci lepszy obraz, ile pamięci jest naprawdę dostępne. W tym przypadku chcesz zwrócić uwagę na numer 3416, a nie 101.

gulasz
źródło