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. Uruchomienie sar
w trybie wsadowym powinno dać dobrą diagnostykę dotyczącą użycia pamięci i powiązanych operacji we / wy. Uruchomienie w munin
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ć.
- Źle zaprogramowane aplikacje działające pod
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ąc MaxRequestsPerChild
na około 100. Jeśli to rozwiąże problem, musisz usunąć wyciek. Najpierw obejrzałbym to.
- MySQL może próbować załadować dane do pamięci. Jeśli masz dużo danych w pamięci, może to powodować druzgocenie, ale nie powinno być tak dramatyczne, jak widzisz.
- Jeśli masz zamontowany duży
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.
- Jeśli problem występuje mniej więcej o tej samej porze dnia, możesz mieć zaplanowany program, który przecieka pamięć.
- Jeśli masz program, który przydziela pamięć współdzieloną, ale nie zwalnia jej przed wyjściem, będziesz miał stosunkowo niewidoczny wyciek pamięci. Jeśli pamięć współdzielona jest zablokowana w pamięci, może wymusić zamianę. Ilość dostępnej pamięci współdzielonej jest zwykle stosunkowo ograniczona.
- Pakiet liquidsoap + icecast może napotykać problemy z buforowaniem, które wykorzystują pamięć. Nie użyłem tej kombinacji, więc nie jestem pewien, jak by to wyglądało.
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.