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

Мой сервер имеет 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 , что составляет около 384M. Я столкнулся с несколькими no space left on device , поэтому я увеличил его до 40%VM , но даже с примерно 763 М он все еще слишком мал.

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

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

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

Поэтому с моей настройкой я могу нажать /run :

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

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

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

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

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

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

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

  • Tmpfs с переполнением на диске?
  • Что происходит, когда объем tmpfs заполнен и swap заполнен? Включен ли OOM-убийца Linux?
  • Ограничьте размер tmpfs с помощью overlayroot
  • В системной памяти ... в частности, разница между `tmpfs,` `shm,` и `hugepages ...`
  • Ubuntu 16.04 с файловой системой только для чтения и записываемым слоем
  • изменить размер devtmpfs / dev /
  • Как определяются права собственности и разрешения для папок tmpfs, созданных с помощью / etc / fstab?
  • / tmp в качестве tmpfs: Совместимость и безопасность
  • One Solution collect form web for “Насколько безопасно увеличить tmpfs до большей, чем физической памяти?”

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

     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 ГБ на виртуальной машине, потому что я не знаю, откажется ли ядро ​​от перезагрузки или просто неожиданное поведение.

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

    Interesting Posts

    Могу ли я использовать xterm для чтения / записи на ПК без создания другого процесса (например, оболочки)?

    svn update or checkout: Не удается прочитать строку длины в файле '/ home / username / svn_repository / db / revs / 0/697'

    Awk / sed извлекает информацию, когда шаблон соответствует абзацу

    Как узнать, поддерживается ли сторонний репозиторий?

    Только подкаталоги rsync и контент

    Есть ли цель для символической ссылки, которая указывает на каталог, содержащий его?

    Что такое распределение на основе арки, которое движется медленнее

    Изменение фона grub2

    Grub 2 os prober для окон 8

    vi – скопировать текст и передать в качестве аргумента команду escape shell

    Создать таблицу с частотой уникальных имен, полученных из нескольких CSV-файлов

    Как определить и загрузить свою собственную функцию оболочки в zsh

    Устранение неполадок с системой systemd в системе Centos 7

    Что изначально сделал липкий бит при применении к файлам?

    pm-utils: Нет сети для приостановки сценариев?

    Linux и Unix - лучшая ОС в мире.