Mam serwer, na którym działa pakiet liquidsoap + icecast i prosta strona internetowa (httpd + mysqld). Nic specjalnego. Odwiedzający około 2000+ dziennie, przy czym średnio 50 osób jest jednocześnie online.
Serwer ma 8 GB pamięci RAM. Z biegiem czasu ilość wolnej pamięci stale maleje, chociaż na serwerze nie rozpoczyna się nic nowego i nie ma nowych użytkowników. W pewnym momencie zaczyna się zamieniać, obciążenie serwera rośnie i przestaje odpowiadać. Zwykle po prostu restartuję serwer ...
Co można zrobić, aby wykryć, co dokładnie wycieka pamięć? Używam góry do monitorowania zużycia zasobów, ale o ile widzę, nie pokazuje nic pomocnego:
Czy jest jakiś sposób, aby dowiedzieć się, co wykorzystuje tyle pamięci? lub co zaczyna się intensywnie zamieniać na dysk? Jakiś sposób na zwolnienie pamięci bez ponownego uruchamiania serwera?
źródło
Odpowiedzi:
Działając
top
w trybie wsadowym w celu okresowego raportowania wielkości pamięci, można sprawdzić, kto korzysta z pamięci, gdy rzeczy idą na południe. Uruchomieniesar
w trybie wsadowym powinno dać dobrą diagnostykę dotyczącą użycia pamięci i powiązanych operacji we / wy. Uruchomienie wmunin
celu monitorowania systemu powinno dać ci wykres z dokładnymi szczegółami, do czego używana jest pamięć. To może bardzo pomóc.Możesz użyć limit.conf, aby ograniczyć maksymalny rozmiar rdzenia programów. Prawidłowo ustawiony, powinien zabić wszelkie programy, które przeciekają pamięć. Działa to z modułem pam_limits. Granice można również ustawić za pomocą
ulimits
polecenia.Używasz kilku programów, które mogą zużywać duże ilości pamięci. Oto niektóre rzeczy, na które możesz spojrzeć.
apache2
mogą wyciekać pamięć. Gdy tak się stanie, powinieneś zobaczyć wzrost wielkości pamięci. Możesz nastroić apache2, aby przetwarzać dzieci po określonej liczbie zastosowań, ustawiającMaxRequestsPerChild
na około 100. Jeśli to rozwiąże problem, musisz usunąć wyciek. Najpierw obejrzałbym to.tmpfs
system plików, możesz wyciec pamięć, jeśli pliki nie zostaną usunięte podczas używania. Problemem mogą być również duże, długo żyjące pliki.Normalne użycie pamięci: wolna pamięć nie jest czymś, czego bardzo chcesz. Jeśli twój system działał od dłuższego czasu i ma dużo wolnej pamięci, coś jest nie tak. Za każdym razem, gdy czytasz lub zapisujesz plik, bloki przechodzą do bufora pamięci podręcznej. Zmniejszy to twoją wolną pamięć i jest dobrą rzeczą. System zachowa wystarczającą ilość wolnego miejsca, aby uruchomić kilka programów bez szukania pamięci w innym miejscu. Ponieważ wiele programów działa szybko, ich pamięć zostanie zwrócona do wolnej puli, gdy przestaną działać.
Podczas odczytywania pliku znajdującego się w pamięci podręcznej bufora dostęp do dysku nie jest wymagany, a odczyt jest rozstrzygany z pamięci podręcznej bufora. Pisze używają podobnego mechanizmu. Jeśli system potrzebuje pamięci, pamięć podręczna bufora jest jednym z pierwszych używanych miejsc. Większość buforów można zwolnić natychmiast.
Jeśli masz wyciek pamięci, zobaczysz wolną pamięć, a bufory zaczną się kurczyć. To nadal nie jest poważny problem, ponieważ wyciek pamięci powinien ostatecznie zostać przeniesiony na przestrzeń wymiany. Twój system będzie nadal działał poprawnie, dopóki nie wypełnisz przestrzeni wymiany i nie wykorzystasz pozostałego wolnego miejsca do punktu, w którym nie można uruchomić programów. Zazwyczaj można użyć niewielkiej ilości przestrzeni wymiany.
źródło
sar
pomoże wskazać, która partycja ma we / wy i może pomóc w wykryciu problemu.Możesz użyć tego polecenia, aby zobaczyć 10 najlepszych aplikacji dotyczących użycia pamięci RAM:
Czasami to polecenie pomaga, jeśli wygenerowano wiele podprocesów:
W ten sposób możesz zobaczyć, które procesy należą do siebie.
źródło
ps
lubtop
wyjściu jest właściwe, aby sprawdzić, czy próbujesz wykryć wyciek pamięci: Czy to nie tylko procent pamięci fizycznej, której aktualnie używa proces? Ale inne części używanej (w tym wycieku) pamięci procesu mogą zostać zamienione. Być może „rozmiar” lub „rozmiar” byłoby bardziej odpowiednie do pomiaru wielkości procesu? Np.ps -A --sort -size -o comm,size | head -n 11
Lubps -A --sort -vsize -o comm,vsize | head -n 11
Nic tak naprawdę nie wykorzystuje tej pamięci pod względem aplikacji.
Musisz odjąć wartość „buforowaną”, która reprezentuje pamięć podręczną strony, aby uzyskać lepszy pogląd na faktyczne wykorzystanie pamięci przez program.
Zasadniczo jest to dobre zarządzanie pamięcią i jest to idealne rozwiązanie.
Zobacz link tutaj, aby uzyskać więcej informacji: http://www.linuxatemyram.com/
źródło
Tak naprawdę nie jestem profesjonalistą, ale mydło w płynie + lody są związane z multimediami. Gdy system jest wolny, buforuje i / lub zajmuje pamięć do wykorzystania w przyszłości. A jeśli ruch wzrośnie o określonej porze dnia / w danym okresie, zacznie się zamieniać. W tym momencie, jeśli żądania (użytkownicy przeglądający zawartość) wzrosną, wówczas potrzebne zasoby będą większe niż 8 GB pamięci RAM.
źródło