Jak bezpieczne jest zwiększenie tmpfs do pamięci fizycznej?


11

Mój serwer ma 2 GB pamięci RAM i 120 GB SSD, a także kilka macierzy RAID do przechowywania. System operacyjny to Debian 8 (Linux 3.16).

Mam intensywną aplikację MySQL, która ma tmpdir= /run/mysqld, która jest tmpfskonfigurowana przez Debian poprzez /etc/default/tmpfs:

# Size limits.  Please see tmpfs(5) for details on how to configure
# tmpfs size limits.
TMPFS_SIZE=40%VM

Kiedyś było 20%VMto około 384 mln. Pobiegłem przeciwko kilku no space left on device, więc zwiększyłem go do 40%VM, ale nawet przy około 763 mln wciąż jest za mały.

Teraz powinienem dodać więcej pamięci RAM, ale z ciekawości chciałbym poznać ograniczenia tutaj.

  • /dev/sdd1jest zamontowany, /ma około 50 GB wolnego miejsca i jest dość szybki (Samsung 850 EVO SSD)
  • /dev/sdd5 to moja partycja wymiany, jest to 3,7G (identyfikator typu fdisk to 82)
  • TMPFS_SIZEjest ustawiony na 40%VM, co /runoznacza 763 M.

Teraz wiem, że tmpfs mogą się wymieniać, co jest dla mnie w porządku. Chcę, aby MySQL zapisywał w pamięci RAM, gdy tylko jest to możliwe, ale jeśli potrzebuje więcej pamięci, mogę pozwolić systemowi zamienić ją na SSD.

Czy w mojej konfiguracji mogę naciskać /runna:

  • 300 mln dużych? Tak. To był domyślny.
  • 1,5 GB duży? Tak, próbowałem, MySQL zużył na nim do 1,3 GB, a system działał jak urok. Ale to wciąż mniej niż połowa pamięci fizycznej + partycja wymiany.
  • 2,5 GB duży? To więcej niż pamięć fizyczna, ale mniej niż połowa pamięci fizycznej + moja partycja wymiany.
  • 4 GB duży? To by ściśle pasowało do połowy fizycznej + zamiany
  • Więcej? jak 10 GB? czy może wykorzystać wolne miejsce, /aby zamienić więcej?

Domyślam się, że podstawową zasadą bezpieczeństwa jest TMPFS_SIZEnie większa niż zamiana + połowa pamięci fizycznej. Czy mogę wyjść poza to bez zwiększania partycji wymiany?

Ponadto, jest to możliwe do wprowadzenia 200%VMw /etc/default/tmpfs? Przeczytałem, tmpfs(5)nie wiedząc, czy mogę w tym postawić> 100%.

Na koniec, czy powinienem to zrobić /etc/fstabzamiast tego i nie dotykać /etc/default/tmpfs?

(aby wiedzieć, że tylko to mount -o remountzrobiłem, nie uruchomiłem jeszcze serwera)

Edycja: w przypadku ostatniego pytania wiem, że można go modyfikować /etc/fstab(patrz cytat ze strony podręcznika man), jednak chciałem poznać najlepszą praktykę, ponieważ do /etc/defaulttej pory niczego nie dotykałem .

Bardziej złożone opcje montowania mogą być wykorzystane przez utworzenie odpowiedniego wpisu w / etc / fstab.


Interesujące pytanie. Wydaje mi się, że może to być również bardzo związane z ustawieniem nadmiaru pamięci.
phk,

Wydaje się, że maksymalny rozmiar tmpfs byłby fizyczny + zamiana. Widziałem to w dokumentacji jądra .
Benoit Duffez

Odpowiedzi:


8

Pomyślałem, że mogę to przetestować, więc pobiegłem:

sudo mount -o remount,size=2800M /run

Działa jak urok:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G   45M  2.7G   2% /run

Więc trochę to wypełniłem:

fallocate -l 1G /run/test.img
fallocate -l 1G /run/test2.img
fallocate -l 500M /run/test3.img

Wynik:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G  2.6G  208M  93% /run

System nadal działa. Zmniejszona dostępność wymiany, co dowodzi, że została użyta:

spadek dostępności wymiany

  • 17:10: utwórz 2,5 GB plików w /run
  • 17:20: usuń plik 500M

Całkowita zamiana jest pomniejszona o kwotę pobraną przez /run.

Testowałbym 10 GB na maszynie wirtualnej, ponieważ nie wiem, czy jądro odmówi ponownego podłączenia, czy po prostu zachowa się nieoczekiwanie.

Wciąż szukam prawdziwej odpowiedzi, ale pragmatyczny sposób pokazał, że działa.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.