Tomasz Zadora

Tomasz Zadora programuję

Temat: ext3 (?) a zużucie pamięci

Na swoim Linuxie (Fedora, serwer www) obserwuję następującą rzecz: zużycie pamięci rośnie od pewnego poziomu, dochodzi do prawie końca fizycznej pamięci, po czym dość szybko zwalniane jest około 500MB RAMu.

Z uwagi na to, że relatywnie niewiele programów i procesów działa na serwerze, próbowałem znaleźć "winnego": serwer MySQL, serwer www (nginx) i inne.

Każda analiza prowadziła do wniosku, że dany program z dużym prawdopodobieństwem nie zajmuje aż tyle pamięci i nie w tak charakterystyczny sposób.

Komenda "top" też nie pokazuje nic co mogłoby nakierować na rozwiązanie pytania.

W związku z tym, że nie znam się "niskopoziomowo" na Linuxie mam pytanie czy przypadkiem nie jest to związane z systemem plików ext3 lub jakimś rodzajem "keszu" tworzonym przez system operacyjny w trakcie działania ?

Temat: ext3 (?) a zużucie pamięci

Tomasz Zadora:
Na swoim Linuxie (Fedora, serwer www) obserwuję następującą rzecz: zużycie pamięci rośnie od pewnego poziomu, dochodzi do prawie końca fizycznej pamięci, po czym dość szybko zwalniane jest około 500MB RAMu.

Z uwagi na to, że relatywnie niewiele programów i procesów działa na serwerze, próbowałem znaleźć "winnego": serwer MySQL, serwer www (nginx) i inne.

Każda analiza prowadziła do wniosku, że dany program z dużym prawdopodobieństwem nie zajmuje aż tyle pamięci i nie w tak charakterystyczny sposób.

Komenda "top" też nie pokazuje nic co mogłoby nakierować na rozwiązanie pytania.

W związku z tym, że nie znam się "niskopoziomowo" na Linuxie mam pytanie czy przypadkiem nie jest to związane z systemem plików ext3 lub jakimś rodzajem "keszu" tworzonym przez system operacyjny w trakcie działania ?

A ja z doświadczenia mogę powiedzieć, że Apache potrafi zjeść cały RAM. Opis pasuje mi do sytuacji kiedy Apache się forkuje pod przyszły ruch (na podstawie zapytań historycznych) po czym jeśli ten ruch się nie pojawił następuje zwolnienie zasobów. W TOP i innych tego typu programach w prost tego nie zauważysz.

Proponuję w pierwszej kolejności sprawdzić ustawienia modułu MPM z którego korzystasz. Mi udało się (MPM worker) tak ustawić, po analizie statystycznej zebranych dany z 3 dni, by 1G odzyskać.
Tomasz Zadora

Tomasz Zadora programuję

Temat: ext3 (?) a zużucie pamięci

Przecież napisałem, że używam nginx-a a nie Apache.Tomasz Zadora edytował(a) ten post dnia 04.02.11 o godzinie 17:02

Temat: ext3 (?) a zużucie pamięci

Tomasz Zadora:
Przecież napisałem, że używam nginx-a a nie Apache.

Przepraszam za szybko przeczytałem. Mimo wszystko ja bym na file system winy nie zrzucał i poszukał czegoś wyższego poziomu.

Cache tak i owszem może być tak, że jajko alokuje sobie więcej pamięci na bufory ale to nie wpływa na wydajność działania całej platformy.

Baza danych jeśli jakąś masz zawsze rezerwuje sobie pamięć. Tego też nie zobaczysz na top'ie.

Za miast z top skorzystaj z extended top (etop) - więcej parametrów i kolorowanie z podstawowymi wykresami słupkowymi.Piotr Rusoł edytował(a) ten post dnia 04.02.11 o godzinie 18:08
Tomasz Zadora

Tomasz Zadora programuję

Temat: ext3 (?) a zużucie pamięci

Spoko, natomiast wszystko wyższego poziomu sprawdziłem, tj:

postfix + dovecot,
nginx,
mysql,
php-fpm + APC,
memcached,
pure-ftpd,
ntpd

+ inne pomniejsze usługi jak "rsyslogd", "saslauthd", etc.

I nic nie wskazuje na to, żeby którykolwiek z tych programów generował ten problem.

Przede wszystkim dlatego, że restart którejkolwiek z w/w usług powoduje obniżenie zajętości pamięci ale w o wiele mniejszym rozmiarze i wg. oczekiwań wynikających z konfiguracji.

Dlatego pytam, czy może być coś bardziej na poziomie systemu operacyjnego lub systemu plików co powoduje takie zajętości pamięci.

EDIT:
O WIDZISZ O JAJKU WSPOMNIAŁEŚ - i tu prawdopodobnie tkwi problem, będę szukać dalej w tym kierunku.Tomasz Zadora edytował(a) ten post dnia 04.02.11 o godzinie 18:14

konto usunięte

Temat: ext3 (?) a zużucie pamięci

Tomasz Zadora:
Na swoim Linuxie (Fedora, serwer www) obserwuję następującą rzecz: zużycie pamięci rośnie od pewnego poziomu, dochodzi do prawie końca fizycznej pamięci, po czym dość szybko zwalniane jest około 500MB RAMu.
[...]
W związku z tym, że nie znam się "niskopoziomowo" na Linuxie mam pytanie czy przypadkiem nie jest to związane z systemem plików ext3 lub jakimś rodzajem "keszu" tworzonym przez system operacyjny w trakcie działania ?

W jaki sposób sprawdzasz zużycie pamięci? top i free podają dużo większe zużycie pamięci niż jest rzeczywiste, ponieważ wliczają do pamięci "używanej" również cache i bufory. Używając np. htop można zobaczyć jak to wygląda naprawdę:


Obrazek


top pokazuje, że użyte jest ~3GB ramu, natomiast htop pokazuje, że pamięć przydzielona pod wszystkie procesy to 1339MB, a reszta to cache i bufory. Kiedy będzie potrzeba przydzielenia większej ilości pamięci procesom, cache/bufory zostaną wyczyszczone.

Nie tłumaczy to oczywiście wahań zużycia pamięci, które obserwujesz, ale może warto przeprowadzić obserwacje za pomocą innych narzędzi? Jeśli google nic nie wie, to może najprościej będzie napisać jakiś skrypt który okresowo (np. co sekundę) zbiera dane o zużyciu pamięci wszystkich procesów z /proc i generuje wykresy gnuplotem? ;)
Tomasz Zadora

Tomasz Zadora programuję

Temat: ext3 (?) a zużucie pamięci

Faktycznie cały czas myślę, że to jakiś bufor systemowy (plików ?).

Zainstalowałem "htop" i proszę: fizyczne zużycie pamięci 3 razy mniejsze niż pokazuje top :)

Natomiast chętnie pozmniejszałbym bufory, bo wiadomo - w sytuacji kiedy zaczyna brakować na nie pamięci, programy które zarządzają tymi buforami muszą dokonywać przeliczeń i je dostosowywać a po co.

Wahania pamięci są rzadkie, przez 1-2 dni zużycie rośnie, po czym nagle spada o 500MB.

Temat: ext3 (?) a zużucie pamięci

Tomasz Zadora:
Spoko, natomiast wszystko wyższego poziomu sprawdziłem, tj:

postfix + dovecot,
nginx,
mysql,
php-fpm + APC,
memcached,
pure-ftpd,
ntpd

+ inne pomniejsze usługi jak "rsyslogd", "saslauthd", etc.

I nic nie wskazuje na to, żeby którykolwiek z tych programów generował ten problem.

Przede wszystkim dlatego, że restart którejkolwiek z w/w usług powoduje obniżenie zajętości pamięci ale w o wiele mniejszym rozmiarze i wg. oczekiwań wynikających z konfiguracji.

Dlatego pytam, czy może być coś bardziej na poziomie systemu operacyjnego lub systemu plików co powoduje takie zajętości pamięci.

EDIT:
O WIDZISZ O JAJKU WSPOMNIAŁEŚ - i tu prawdopodobnie tkwi problem, będę szukać dalej w tym kierunku.

Za nim zaczniesz grzebać po jądrze sprawdź jeszcze raz usługi. Jak ja walczyłem z podobnym zjawiskiem to Apache też mi się na topach prezentował normalnie a doszedłem, że to Apache po konfiguracji serwera i ilości żyjących ale nie używanych wątków. Co ciekawsze w htop odpalone wątki jako by zajmowały tylko 0,2MB pamięci każdy, co oczywiście było bzdurą ale to dopiero udowodniłem w chwili zestawienia ilości wątków i sposobu działania Apache+MPM Worker.

Jeżeli zjawisko jest cykliczne, czyli zajętość pamięci pływa o te 500MB tym bardziej skłaniał bym się ku jakiejś usłudze, która alokuje pamięć na podstawie obciążenia historycznego.Piotr Rusoł edytował(a) ten post dnia 04.02.11 o godzinie 18:34
Tomasz Zadora

Tomasz Zadora programuję

Temat: ext3 (?) a zużucie pamięci

Dobrze, ale jeżeli ja dokonuje STOP usługi to w tym momencie jest ściągana cała pamięć którą usługa zajmuje, prawda ? Jak już wspominałem, żaden stop nie zmniejsza obciążenia aż o tyle.Tomasz Zadora edytował(a) ten post dnia 04.02.11 o godzinie 18:37

Temat: ext3 (?) a zużucie pamięci

Tomasz Zadora:
Dobrze, ale jeżeli ja dokonuje STOP usługi to w tym momencie jest ściągana cała pamięć którą usługa zajmuje, prawda ? Jak już wspominałem, żaden stop nie zmniejsza obciążenia aż o tyle.Tomasz Zadora edytował(a) ten post dnia 04.02.11 o godzinie 18:37

Tak jest w teorii ale odkąd mamy dynamiczne managery pamięci (i poruszamy się poza stosem) zwolniona pamięć może być zwrócona do ponownego użycia z opóźnieniem. Aby wyeliminować, że to na pewno żadna usługa (jeśli możesz) wyłącz wszystkie (tak że by się nie podnosiły) i zrób restart maszyny. Jeżeli zjawisko się powtórzy masz odpowiedź, że to któryś z podstawowych komponentów systemu. Jeśli nie to mamy usługę i pozostaje pytanie która i w jakim momencie.
Tomasz Zadora

Tomasz Zadora programuję

Temat: ext3 (?) a zużucie pamięci

Raz, że mam uptime już 155 dni i żal mi go skasować :], to w dodatku to jest serwer produkcyjny, całą dobę coś się tam dzieje.

Naprawdę nie wierzę, że to któraś usługa, wszystkie są bardzo precyzyjnie skonfigurowane - można powiedzieć z kalkulatorem w dłoni.

Sądzę, że to jednak kernel, czytam sobie http://aplawrence.com/Linux/buffer_cache.html i zobaczymy co z tego wyniknie.

konto usunięte

Temat: ext3 (?) a zużucie pamięci

Tomasz Zadora:
Faktycznie cały czas myślę, że to jakiś bufor systemowy (plików ?).

Zainstalowałem "htop" i proszę: fizyczne zużycie pamięci 3 razy mniejsze niż pokazuje top :)

Natomiast chętnie pozmniejszałbym bufory, bo wiadomo - w sytuacji kiedy zaczyna brakować na nie pamięci, programy które zarządzają tymi buforami muszą dokonywać przeliczeń i je dostosowywać a po co.

Wydaje mi się, że programy nie zarządzają tymi buforami; to co htop pokazuje jako "buffers" to raczej bufory I/O w systemie - na poziomie systemu plików właśnie, na poziomie stosu tcp/ip... bo gdyby to były bufory utrzymywane przez programy, to raczej pamięć zaalokowana pod nie byłaby uwzględniona w ogólnym zużyciu ramu przez te programy.

BTW. nie wiem jak na innych konfiguracjach, u mnie ta pamięć "buffers" jest zawsze dość mała. na 4GB ramu rzadko kiedy podskakuje powyżej 200MB, więc tweakowanie jej nie ma chyba sensu; za to "cache" wypełnia niemal wszystko co jest wolne. No ale czyszczenie cache w przeciwieństwie do czyszczenia buforów nie wymaga wielkich nakładów czasowych.
Tomasz Zadora

Tomasz Zadora programuję

Temat: ext3 (?) a zużucie pamięci

Chodzi mi o cache nie buffers, wykonanie komendy:

$ ipcs -m
lub
$ ipcs

pokazuje, że w ogóle nic nie używa na serwerze buforów.

W takim razie ten cache o którym piszemy to prawdopodobnie cache kernela dotyczący systemu plików i połączeń sieciowych. Jeżeli tak, to rozumiem,
że ewentualny tuning tych ustawień wiąże się z ponowną kompilacją kernela ?Tomasz Zadora edytował(a) ten post dnia 04.02.11 o godzinie 19:04

konto usunięte

Temat: ext3 (?) a zużucie pamięci

slabtop -s c

powie ci ile pamięci zajętej przez jajko zajmują dane filesystemów i innych jego podsystemów, ta pamięć pokazuje się jako zajęta a nie jako cache i bufory dyskowe

Temat: ext3 (?) a zużucie pamięci

Tomasz Zadora:
Chodzi mi o cache nie buffers, wykonanie komendy:

$ ipcs -m
lub
$ ipcs

pokazuje, że w ogóle nic nie używa na serwerze buforów.

W takim razie ten cache o którym piszemy to prawdopodobnie cache kernela dotyczący systemu plików i połączeń sieciowych. Jeżeli tak, to rozumiem,
że ewentualny tuning tych ustawień wiąże się z ponowną kompilacją kernela ?Tomasz Zadora edytował(a) ten post dnia 04.02.11 o godzinie 19:04

Nie koniecznie. Część parametrów można ustawić w locie. Wejdź sobie na stronę Redhat'a i tam są dokumenty pdf do ściągnięcia za free typu jak zainstalować Redhat, administarcja RedHat itp. W jednym z tych dokumentów jest cały rozdział poświęcony temu, co i w jaki sposób można zmienić w trakcie działania "jądra" przez vfs "sys" i ten drugi (nie pamiętam a nie mam pod ręką pingwina).
Tomasz Zadora

Tomasz Zadora programuję

Temat: ext3 (?) a zużucie pamięci

slabtop - cool, teraz się mniej więcej już wszystko zgadza :) Pozostaje tylko poświęcić trochę czasu na naukę tuningu kernela, dzięki.

konto usunięte

Temat: ext3 (?) a zużucie pamięci

Tomasz Zadora:
slabtop - cool, teraz się mniej więcej już wszystko zgadza :) Pozostaje tylko poświęcić trochę czasu na naukę tuningu kernela, dzięki.

podsumowując: top'em to se możesz obojrzeć jak top sobie zużywa zasoby :) Do prostych analiz top wystarcza, a do trudniejszych to już odpada, te narzędzia które podali przedmówcy są ok, ja bym jeszcze dorzucił jakiegoś vmstat. I jeszcze jedno sobie zapamiętaj do końca życia: wolna pamięć RAM to zmarnowana pamięć RAM :)

Temat: ext3 (?) a zużucie pamięci

Linux domyślnie używa całej (no, prawie) wolnej pamięci RAM jako cache do dysku, grzebanie w kernelu tylko po to żeby top pokazywał większą cyferkę w "free" to strata czasu, tak to system użyje chociaż tego RAMu do czegoś przydatnego, chociażby cache plików serwowanych przez webserver.
Tomasz Zadora

Tomasz Zadora programuję

Temat: ext3 (?) a zużucie pamięci

Mariusz - tylko co w sytuacji, kiedy chciałbym przydzielić trochę więcej pamięci np. dla serwera baz danych albo pozwalać na uruchamianie większej ilości procesów php-fpm, etc. ?

Rozumiem, że do pewnego momentu system (kernel) będzie sobie z tym radzić, oddając miejsce, ale w pewnym momencie zacznie się korzystanie ze swapa ?

Może Linux zawsze będzie chętnie używał swapa ? Używanie swapa to coś czego chciałbym uniknąć - czy tego typu rzeczy można skonfigurować, w sensie: "swapa używaj tylko w ostateczności" ?Tomasz Zadora edytował(a) ten post dnia 05.02.11 o godzinie 17:07

konto usunięte

Temat: ext3 (?) a zużucie pamięci

Swap jest używany tylko w ostateczności.
W pierwszej kolejności polecą bufory- tu akurat Mariusz ma rację.



Wyślij zaproszenie do