Nowe posty

Autor Wątek: CentOS 5 - wycieki pamięci  (Przeczytany 4362 razy)

Walian

  • Gość
CentOS 5 - wycieki pamięci
« dnia: 2011-07-18, 15:19:27 »
Ma ktoś pomysł jak namierzyć, który proces powoduje wycieki pamięci?

Po reboocie na serwerze jest 1200 MB wolnej pamięci RAM spośród 2 GB.
Po ok 10 minutach jest już tylko 15 MB i ten stan utrzymuje się na stałe, nawet po tygodniu pracy serwera. I jeśli nagle wlezie za dużo użytkowników na nasze strony - innymi słowy serwer zaliczy za duży ruch - system wariuje zrzucając co się da do SWAP-a i następuję totalna zmuła utrudniająca nawet wpisanie jakiegokolwiek polecenia w terminalu poprzez PuTTY...

Sprawdzam na bieżąco poleceniem "free" i widzę, jak co kilka sekund znikają kolejne megabajty pamięci.

Na serwerze działa:
- MySQL
- Apache + PHP 5
- Sphinx 1.10 beta
oraz standardowe aplikacje takie jak CRON itp.

Apache zużywa średnio 15 - 46 MB per process. To normalne?
Obstawiam, że to wina Apache, ale jak to sprawdzić i jak temu zaradzić?

P.S. Wiem, że taka ilość RAM-u na serwerze dedykowanym jest śmieszna, ale może nie zwracajmy na to chwilowo uwagi i skupmy się na odnalezieniu przyczyny wycieków.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3070
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
CentOS 5 - wycieki pamięci
« Odpowiedź #1 dnia: 2011-07-18, 15:29:17 »
a) top/htop pokazuje zajętość pamięci w czasie rzeczywistym.
b) pisałem wielokrotnie, RAM nie jest od tego, aby był pusty. Jak aplikacje z niego akurat nie korzystają, to jest alokowany na bufory. Jeżeli jest to serwer bazodanowy to jest dużo zapisów na dysk, i bufory/cache musza być zapisane na dysk przed zwolnieniem pamięci dla aplikacji. Kilkanaście/dziesiąt MB wolnego RAMu to normalne w Linuksie pod obciążeniem.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Walian

  • Gość
CentOS 5 - wycieki pamięci
« Odpowiedź #2 dnia: 2011-07-19, 08:15:53 »
a) top/htop pokazuje zajętość pamięci w czasie rzeczywistym.
Tak, wiem, używam zawsze top-a.

b) pisałem wielokrotnie, RAM nie jest od tego, aby był pusty. Jak aplikacje z niego akurat nie korzystają, to jest alokowany na bufory. Jeżeli jest to serwer bazodanowy to jest dużo zapisów na dysk, i bufory/cache musza być zapisane na dysk przed zwolnieniem pamięci dla aplikacji. Kilkanaście/dziesiąt MB wolnego RAMu to normalne w Linuksie pod obciążeniem.

A normalne jest to, o czym pisałem - mianowicie obciążenie powodujące wysoce utrudnione korzystanie z konsoli, totalną padakę bazy danych (niemożność połączenia się z poziomu skryptów WWW) itp? I to się dzieje w momencie, gdy zostanie wolne ~17 MB RAM - system zaczyna wtedy hulać sobie ze SWAP-em. Oprócz tego odnotowuję często problemy z segmentation fault u Apache. Monitoruję bazę po restarcie maszyny i powiem Ci, że nic wielkiego się nie dzieje, żadne skomplikowane czy zwracające dużą ilość danych zapytania w tym czasie nie lecą.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3070
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
CentOS 5 - wycieki pamięci
« Odpowiedź #3 dnia: 2011-07-19, 14:45:07 »
Segfault sugeruje, że jest coś zwalone. Procek, pamięć, płyta, dysk, binarki. Coś pojawia się w logach podczas "przytkania"? Szaleństwo i mulenie przy zapisie może wskazywać na błędy na linii aplikacja-dysk (błąd dysku, kontrolera, kabli, zły/stary moduł do obsługi kontrolera, błędy w strukturze logicznej dysku, niewydajny system plików, błędna konfiguracja).
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy