Как полностью отключить подкачку?

Это для zsh, не колотят, к вашему сведению (если Вы не использовали его, Вы не будете сожалеть, что испытали его). Это действительно полезно для того, чтобы быстро вывести длинные тракты для передач scp. Это работает точно так же, как использование, чтобы завершить или перечислить доступные имена файлов/каталоги.

Пример

scp webdev@example.com:/home/webdev/domains/example.com/http.public/long<tab>

завершит путь к /home/webdev/domains/example.com/http.public/longdirname.

Я плох в примерах, но это должно дать Вам идею. Испытайте его, это может действительно сохранить Вас пальцы от ввода.

# SSH Completion
zstyle ':completion:*:scp:*' tag-order \
   files users 'hosts:-host hosts:-domain:domain hosts:-ipaddr"IP\ Address *'
zstyle ':completion:*:scp:*' group-order \
   files all-files users hosts-domain hosts-host hosts-ipaddr
zstyle ':completion:*:ssh:*' tag-order \
   users 'hosts:-host hosts:-domain:domain hosts:-ipaddr"IP\ Address *'
zstyle ':completion:*:ssh:*' group-order \
   hosts-domain hosts-host users hosts-ipaddr
zstyle '*' single-ignored show
30
17.02.2019, 10:21
6 ответов

Отключение подкачки не сделает то, что Вы хотите. Вы все еще получите сильную пропускную способность ввода-вывода, но это будет иметь чистые страницы, а не грязные.

Без подкачки система сожмет кэш чистых (неизмененных) страниц к почти нулю, потому что это - единственные страницы, которые это может выселить из физической памяти. Это может только выселить грязные (измененные) страницы из памяти путем записи им для свопинга без подкачки, это не имеет никакого способа выселить грязные страницы.

Поскольку Вы испытываете нехватку физической памяти, каждый процесс должен будет загрузить свои кодовые страницы из диска, поскольку это выселяет предыдущие кодовые страницы процесса. Результатом будет сильная перегрузка и чрезмерная работа, сделанная подсистемой подкачки.

Это - особый случай очень важного принципа: Для хорошо разработанной системы Вы не можете заставить его работать лучше путем сокращения ее выбора. Linux является хорошо разработанной системой. Удаление подкачки просто дает ему меньше вариантов, таким образом, не удивительно, что это ведет себя хуже.

15
27.01.2020, 19:38
  • 1
    Это только верно, если Вы выделяете только за исключением всей памяти. Убежавший процесс обычно будет пытаться выделить намного больше, и таким образом, он будет уничтожен рано, освобождая, что память, в противоположность продолжению подкачать систему к смерти, пытающейся размещать больше выделений, следовательно, отключая подкачку, может быть полезной, когда Вы только истратили свое использование оперативной памяти от безудержного процесса. –  psusi 15.11.2011, 20:39
  • 2
    Только за исключением всей памяти будет в значительной степени всегда выделяться. Linux конкретно настраивается этот путь. Сделайте a cat /proc/meminfo на любом типичном поле Linux после нескольких часов загрузки. –  David Schwartz 15.11.2011, 20:43
  • 3
    @syockit при отключении подкачки страниц Вы не можете запустить программы. Подкачка страниц является механизмом, которым файлы читаются в при отображении в память. –  David Schwartz 16.11.2011, 18:39
  • 4
    @psusi: Чистые страницы не будут уменьшены до минимума, когда у Вас будет подкачка. Это вместо этого выгрузит грязные, анонимные страницы, которые недавно не использовались. Конечно, так или иначе Вы получите сильную перегрузку в конечном счете, если рабочий набор превысит физическую память. Точка, с или без подкачки, Вы получите большую сильную перегрузку, прежде чем у Вас на самом деле закончится память. Различие с подкачкой, которую будет подкачивать сильная перегрузка (грязные страницы, запишите и читайте). Без подкачки сильная перегрузка будет отказами кода (чистые страницы, только для чтения). –  David Schwartz 28.11.2011, 06:57
  • 5
    @psusi: Вы корректны, если беспокойство является безудержным процессом, который быстро аварийно завершается в потреблении памяти. Но это не то, о чем говорит OP, который является процессом, который использует чрезмерный, но не неограниченный или в широком масштабе чрезмерный, память. Когда это растет через большую зону наилучшего восприятия (где кэш сжат), это будет расти все более медленно, поскольку система перегружается. –  David Schwartz 03.02.2012, 01:44

Чтобы удостовериться, что подкачка не используется, Вы были бы более обеспеченным предотвращением любой подкачки, добавляемой при начальной загрузке. Это может быть сделано, в зависимости от системы путем отключения swap обслуживание начальной загрузки или просто комментирование записи подкачки в /etc/fstab.

Насколько Ваше зависание затронуто, stop() функция в /etc/init.d/swap мог бы дать ключ к разгадке:

stop()
{
       ebegin "Deactivating swap devices"

       # Try to unmount all tmpfs filesystems not in use, else a deadlock may
       # occure. As $RC_SVCDIR may also be tmpfs we cd to it to lock it
       cd "$RC_SVCDIR"
       umount -a -t tmpfs 2>/dev/null

       case "$RC_UNAME" in
               NetBSD|OpenBSD) swapctl -U -t noblk >/dev/null;;
               *)              swapoff -a >/dev/null;;
       esac
       eend 0
}

Заметьте часть о мертвой блокировке. Можно попытаться делать umount -a -t tmpfs самостоятельно перед выключением подкачки.


Править:

Вероятно, Вы могли бы также достигнуть своей цели путем изменения sysctl настройки (см. этот вопрос).

4
27.01.2020, 19:38
  • 1
    я не имею swap в init.d, и при этом у меня нет его на fstab, но я действительно имею /etc/init.d/mountoverflowtmp это монтируется tmpfs для чрезвычайных записей журнала. Делает использование демона подкачки tmpfs также? –  syockit 15.11.2011, 13:58
  • 2
    Вам можно было бы включить его в другом месте - делают grep -RF swap /etc/ если Вы хотите найти его. Но отключать сервис, Вы использовали бы команду как service (IIRC; я не использую Debian сам). –  rozcietrzewiacz 15.11.2011, 14:02
  • 3
    Сама Подкачка не использует tmpfs, потому что tmpfs в оперативной памяти (RAM) файловая система. Но другие сервисы/программы то использование tmpfs мог бы полагаться загружают специальный способ. Я действительно не знаю, но это могло бы иметь некоторое отношение к кэшированию или специальному пути в который tmpfs драйвер требует доступа к области подкачки. –  rozcietrzewiacz 15.11.2011, 14:04
  • 4
    Существует что-то о том, как Linux обрабатывает виртуальную память, которую я не понимаю. Я отключил, загружают большинство возможных путей: через swapoff, и через vm.swappiness=0. Все же kswapd0 все еще выполнения! Интересно, является ли это регрессией от средств кошки … –  syockit 15.11.2011, 17:36
  • 5
    @syockit Это ожидало поведение. Система все еще подкачивает чистые страницы (страницы, которые содержат копии данных файла). Это требует, чтобы никакая область подкачки не подкачала чистые страницы, так как они могут быть считаны назад из источников кроме подкачки. –  David Schwartz 15.11.2011, 18:58

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

(ulimit -d 400000; firefox) &

Число после-d находится в килобайтах. Необходимо экспериментировать с этим в системе для выбора оптимального значения для привычек просмотра. Круглые скобки заставляют подоболочку быть созданной; ulimit управляют только влиянием, которое окружает и его дети, изолируя его эффекты от родительской оболочки.

13
27.01.2020, 19:38
  • 1
    Будет эта работа для хрома, скажем, где у нас есть набор chromium процессы с помощью маленьких блоков памяти? –  jberryman 25.06.2015, 19:37
  • 2
    @jberryman нет, пределы памяти для каждого процесса, а не в расчете на пользователя. –  Kyle Jones 26.06.2015, 17:36
  • 3
    Существует ли способ отправить ему указанный сигнал (например, SIGHUP), когда это достигает предела памяти? –  Geremia 24.02.2017, 18:16
  • 4
    @Geremia кирпич и sbrk системные вызовы прекращают работать, который заставит большинство вещей свернуться и умереть. –  Kyle Jones 24.02.2017, 18:23

Лучше прокомментировать, загружают запись раздела /etc/fstab чем выполнение swapoff -a после каждой начальной загрузки.

У меня есть та же проблема с kswapd0 на моих аппаратных средствах.

Настройка vm.swappiness системный параметр не помогает для меня.

sysctl -w vm.swappiness=0

Я погуглил, и прочитайте много сообщений, списков рассылки, и теперь я думаю, что это - ошибка ядра.

Когда нет никакого активного раздела подкачки, и свободная память становится менее затем некоторым порогом (приблизительно 300 МБ в моем случае), система становится безразличной из-за kswapd0 безумия.

Вероятно, это воспроизводится со специальной конфигурацией и условиями.

Для кого-то это решено системной переустановкой с повторным разделением для других путем создания пользовательского ядра с kswapd0 отключенный.

2
27.01.2020, 19:38

В моей системе (debian sid 2016-11-15) я сделал это:

  1. отключить подкачку сейчас:

    swapoff -a
    
  2. Комментарий строки с разделом подкачки в /etc/fstab

    #### #UUID=c6ddbc95-3bb5-49e1-ab25-b1c505e5360c нет подкачки sw 0 0
    
  3. Отключите монтирование подкачки в systemd:

    systemctl --type swap
    systemctl остановить dev-sda6.swap
    маска systemctl dev-sda6.swap
    

Этого было бы достаточно. Ссылка на своп есть в файле /etc/initramfs-tools/conf.d/resume. Я не знаю, какова цель этого. Возможно, этот файл будет проблемой при следующей перезагрузке (я пока не пытаюсь перезагрузиться, мое время безотказной работы драгоценно ;)).

Параметр
1
27.01.2020, 19:38

the computer hangs with violent I/O throughput in the background. iotop reveals kswapd0 to be the culprit

Пока что я нашел один способ ()избежать этого. Если вы хотите протестировать его и посмотреть, как он работает в вашей системе, см. исправление ядра внутри этого вопроса . По сути, он не вытесняет Active(file)страниц (, по крайней мере, )при нехватке памяти, поэтому перегрузка диска (постоянное чтение )сводится почти к нулю, а убийце OOM -разрешено запускаться в течение 1 секунды, вместо того, чтобы заморозить ОС на время, которое кажется постоянным (или, по крайней мере, на много минут ). Я надеюсь, что настоящие программисты (, которыми я не являюсь ), улучшат патч и превратят его в реальное решение, теперь, когда они видят, что то, что он делает, работает для этих ситуаций.

1
27.01.2020, 19:38

Теги

Похожие вопросы