Насколько безопасно увеличивать tmpfs до физической памяти?

11

Мой сервер имеет 2 ГБ ОЗУ и 120 ГБ SSD, а также несколько массивов RAID для хранения. ОС Debian 8 (Linux 3.16).

У меня есть интенсивное приложение MySQL, которое имеет tmpdir= /run/mysqld, которое tmpfsнастроено Debian через /etc/default/tmpfs:

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

Раньше было 20%VMоколо 384М. Я столкнулся с несколькими no space left on device, поэтому я увеличил его до 40%VM, но даже с 763M он все еще слишком мал.

Теперь я должен добавить больше оперативной памяти, но из любопытства я хотел бы знать здесь ограничения.

  • /dev/sdd1на нем /установлено около 50 ГБ свободного места, и он довольно быстрый (Samsung 850 EVO SSD)
  • /dev/sdd5 мой раздел подкачки, это 3.7G (идентификатор типа fdisk равен 82)
  • TMPFS_SIZEустановлен в 40%VMзначение /run763M

Теперь я знаю, что tmpfs может поменяться, что меня устраивает. Я хочу, чтобы MySQL записывал в ОЗУ всякий раз, когда это возможно, но если ему нужно больше памяти, я могу разрешить системе поменять его на SSD.

Итак, с моей настройкой, я могу нажать, /runчтобы быть:

  • 300М большой? Да. Это было по умолчанию.
  • 1,5 ГБ большой? Да, пробовал, MySQL использовал до 1,3 ГБ, и система работала как шарм. Но это все равно меньше половины физической памяти + раздел подкачки.
  • 2,5 ГБ большой? Это больше, чем физическая память, но меньше половины физической памяти + мой раздел подкачки.
  • 4ГБ большой? Это будет плотно вписаться в половину физического + обмен
  • Больше? как 10 ГБ? может ли он использовать свободное место, /чтобы поменять больше?

Я предполагаю, что эмпирическое правило для безопасности - TMPFS_SIZEне больше, чем своп + половина физической памяти. Могу ли я пойти дальше, не увеличивая раздел подкачки?

Кроме того , можно поставить 200%VMв /etc/default/tmpfs? Я прочитал, tmpfs(5)не зная, смогу ли я поставить> 100% на это.

Наконец, я должен сделать это /etc/fstabвместо этого и не трогать /etc/default/tmpfs?

(до информации, что я только сделал это mount -o remount, я еще не перезагружал сервер)

Изменить: последний вопрос, я знаю, что он может / может быть изменен /etc/fstab(см. Цитату ниже на странице руководства ), однако я хотел бы узнать лучшие практики, потому что я /etc/defaultдо сих пор ничего не касался .

Более сложные параметры монтирования могут быть использованы при создании подходящей записи в / etc / fstab.

Бенуа Даффез
источник
Интересный вопрос. Я думаю, это также может быть очень связано с настройкой переполнения памяти.
PhK
Кажется, что максимальный размер tmpfs будет физическим + swap. Я видел это в документации по ядру .
Бенуа Даффес

Ответы:

8

Я подумал, что могу просто проверить это, поэтому я побежал:

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

Работал как шарм:

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

Поэтому я немного его заполнил:

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

Результат:

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

Система все еще работает. Наличие свопа упало, что доказывает его использование:

падение доступности свопа

  • 17:10: создать 2,5 ГБ файлов в /run
  • 17:20: удалить файл 500M

Суммарный своп уменьшается на сумму взятую /run.

Я бы протестировал 10 ГБ на ВМ, потому что я не знаю, будет ли ядро ​​отказываться от перемонтирования или просто будет иметь непредвиденное поведение.

Я все еще ищу фактический ответ, но прагматичный способ показал, что он работает.

Бенуа Даффез
источник