Jak ustawić domyślną pamięć.swappiness dla wszystkich grup systemowych?

1

W CentOS 7 jak ustawić domyślną pamięć.sappiness dla wszystkich grup systemowych? Mogę to zrobić dla każdej grupy za pomocą opcji ControlGroupAttribute, ale chciałbym zastąpić domyślną wartość 60 dla wszystkich grup.

Jeff Kubina
źródło

Odpowiedzi:

1

Jeśli chcesz to zrobić dla WSZYSTKICH grup, czy chcesz to zrobić dla całego systemu? W takim przypadku możesz ustawić szeroki system wymiany w „/etc/sysctl.conf”. Linia, którą chcesz edytować, to „vm.swappiness =”, którą możesz ustawić na wartość od 0 do 100.

Jako uczciwe ostrzeżenie dla każdego, kto przenosi tę wartość jako sposób na całkowite uniknięcie zamiany, ustawienie tej bardzo niskiej wartości prawie całkowicie wyłączy stronicowanie popytu, co jest bardzo przydatnym sposobem na usunięcie bezczynnych stron z pamięci RAM i zamianę. Tak, to „zamiana”, ale nie jest to tak desperacka rzecz jak stare tradycyjne poczucie zamiany, kiedy kończy się nam pamięć. Stronicowanie popytu jest szczególnie przydatne w dużych bazach danych i nie powinno tak naprawdę niczego spowalniać. Z pewnością przewyższa wymianę rzeczy, gdy brakuje nam pamięci w ostatniej chwili, ponieważ stronicowanie na żądanie pomaga w zapobieganiu temu, gdy system nie działazatrzymanie się, a nie po nim. Ustawienie 0 dla całego systemu vm.swappiness może spowodować, że system zabije procesy OOM pod silnym ciśnieniem, potencjalnie sprowadzając cały system w panikę jądra.

Warto również wspomnieć, że po wywołaniu pliku sysctl.conf należy go odczytać. # sysctl -pczyta linie, które zostały zmodyfikowane w /etc/sysctl.conf. vm.swappiness można zmienić w działającym systemie w ten sposób lub za pomocą procfs w ten sposób: # echo 50 > /proc/sys/vm/swappinessgdzie 50 to dowolna liczba od 0 do 100.

Bufor
źródło
1
Mam już wartość vm.swappiness ustawioną na zero i widzę, że niektóre procesy (mesos) wymieniają się często z ustawieniem swapiness cgroup na 60. Więc nie sądzę, że vm.swappiness ma pierwszeństwo przed ustawieniem cgroups, prawda? to?
Jeff Kubina
1
Przeglądam dokumentację jądra. Widzę, że grupa najwyższych hierarchii honoruje globalny poziom zadowolenia vm.swappiness. Nie widzę jednak żadnej wzmianki o grupach potomnych. Nie rozumiem, dlaczego tak się nie stało, ale muszę przeżuć więcej dokumentacji i prawdopodobnie szybko rozpędzę trochę laboratorium. Wiem, że pamięć.swappiness nie jest ustawieniem, którego można używać w grupach głównych z dziećmi. Ponadto ten scenariusz mógł zostać już rozwiązany w unix.stackexchange.com/questions/77939/…
Spooler
Mój scenariusz nie został rozwiązany w łączu unix.stackexchange, ale dostałem jeszcze więcej dokumentacji i więcej pytań. 1) Domyślna zamiana dla cgroups to 60, ale jak mogę zmienić ten system dla wszystkich istniejących i / lub nowych cgroups? 2) W moim systemie vm.swappiness = 0, ale „cgget -r memory.swappiness /” zwraca 60, czy nie powinno zwracać zera? 3) Z dokumentów cgroup / memory „odzyskanie limitu wymusza, że ​​zamiana 0 naprawdę zapobiega zamianie, nawet jeśli dostępna jest pamięć wymiany”; więc wrt cgroups czy to oznacza ustawienie memory.swappiness = 0 wyłącza zamianę?
Jeff Kubina
Myliłem się na 2), właśnie sprawdziłem, że wykonanie „sysctl -w vm.swappiness = n” ustawia /sys/fs/cgroup/memory/memory.swappiness na n i vice versa.
Jeff Kubina
1
sysctl -w zmienia tylko działające wartości w twoim systemie. Nie tworzy trwałych wpisów, więc zmiany dokonane przy pomocy -w zostaną utracone przy ponownym uruchomieniu. Jeśli chcesz, aby zmiany się utrzymywały, zaktualizuj plik /etc/sysctl.conf o żądane wartości, a także zaktualizuj wartości bieżące (ponieważ plik sysctl.conf nie kontroluje rzeczy w czasie rzeczywistym).
Spooler