Podstawowa idea tutaj prawdopodobnie nie jest taka zła (po prostu bardzo naiwna i wprowadzająca w błąd): mogą być buforowane pliki, do których uzyskanie dostępu w najbliższej przyszłości jest mało prawdopodobne, na przykład pliki logów. Te „zjadają” barana, które później będą musiały zostać uwolnione w razie potrzeby przez system operacyjny w taki czy inny sposób.
W zależności od ustawień swapiness, schematu dostępu do pliku, schematu alokacji pamięci i wielu innych nieprzewidywalnych rzeczy, może się zdarzyć, że gdy nie zwolnisz tych buforów, będą one później zmuszone do ponownego użycia, co zajmuje trochę więcej czasu niż przydzielanie pamięci z puli nieużywanej pamięci. W najgorszym przypadku ustawienia zamiany linuksa spowodują zamianę pamięci programu, ponieważ Linux uważa, że pliki te mogą być używane w najbliższej przyszłości niż pamięć programu.
W moim środowisku Linux często zgaduje, a na początku większości giełd w Europie (około 0900 czasu lokalnego) serwery zaczną robić to, co robią tylko raz dziennie, potrzebując wymiany pamięci, która wcześniej została zamieniona, ponieważ pisanie logi, kompresowanie ich, kopiowanie itp. zapełniało pamięć podręczną do tego stopnia, że trzeba było wymieniać rzeczy.
Ale czy upuszczenie pamięci podręcznej rozwiązuje ten problem? zdecydowanie nie. Rozwiązaniem byłoby powiedzenie linuxowi tego, czego nie wie: że te pliki prawdopodobnie nie będą już używane. Można to zrobić za pomocą aplikacji do pisania, używając rzeczy takich jak posix_fadvise()
lub używając narzędzia linii cmd, takiego jak vmtouch
(które może być również używane do przeglądania rzeczy, a także plików pamięci podręcznej).
W ten sposób możesz usunąć niepotrzebne dane z pamięci podręcznych i zachować rzeczy, które powinny być buforowane, ponieważ po upuszczeniu wszystkich pamięci podręcznych wiele rzeczy musi zostać ponownie odczytanych z dysku. I to w najgorszym możliwym momencie: kiedy jest potrzebny; powodując zauważalne i często niedopuszczalne opóźnienia w aplikacji.
To, co powinieneś mieć na miejscu, to system, który monitoruje wzorce wykorzystania pamięci (np. Jeśli coś się zmienia), a następnie odpowiednio analizuje i odpowiednio działa. Rozwiązaniem może być eksmisja niektórych dużych plików na koniec dnia za pomocą vtouch; może być również dodawanie większej ilości pamięci RAM, ponieważ dzienne szczytowe użycie serwera jest właśnie takie.