Ubuntu быстро исчерпывает RAM, и мой компьютер начинает замораживаться. Какая команда решит это?

Вероятно, это неправильное место, но я считаю, что вы хотите сделать:

apt-get -f install

Это очистит выдающиеся зависимости

72
задан 6 July 2017 в 14:54

22 ответа

Прежде чем запускать ваши ресурсы для использования ресурсов, вы также можете использовать системный вызов setrlimit (2), возможно, с встроенным ulimit встроенной оболочкой bash (или limit, встроенной в zsh), в частности с -v для RLIMIT_AS. Затем слишком большое потребление виртуального адресного пространства (например, с помощью mmap (2) или sbrk (2), используемое malloc (3)) потерпит неудачу (с errno (3) будет ENOMEM).

Затем они ( то есть голодные процессы в вашей оболочке после того, как вы набрали ulimit), будут прекращены до замораживания вашей системы.

Читайте также setrlimit (2) и рассмотрите возможность отключения избыточной памяти (по запуская команду echo 0 > /proc/sys/vm/overcommit_memory как root, см. ulimit, встроенный в вашу оболочку bash ...).

11
ответ дан 18 July 2018 в 10:47

Одним из способов быстрого получения фрагмента свободной оперативной памяти является использование zram, который создает сжатый RAM-диск и меняет местами. С любым полуприличным процессором это намного быстрее, чем обычная своп, и скорость сжатия довольно высока при использовании многих современных RAM-свиней, таких как веб-браузеры.

Предполагая, что у вас установлен zram и настроен, все, что вам нужно do to run

sudo service zramswap start
4
ответ дан 18 July 2018 в 10:47

Создайте еще какую-нибудь своп для себя.

Следующее добавит 8G swap:

dd if=/dev/zero of=/root/moreswap bs=1M count=8192 mkswap /root/moreswap swapon /root/moreswap

Он все равно будет медленным (вы меняете), но вы не должны на самом деле закончились. Современные версии Linux могут свопиться к файлам. О единственном использовании для раздела подкачки в эти дни для спячки вашего ноутбука.

9
ответ дан 18 July 2018 в 10:47
это случается довольно часто для меня, когда я компилирую программное обеспечение в фоновом режиме

. В этом случае что-то вроде «killall -9 make» (или что вы используете для управления своей компиляцией, если не сделать ). Это остановит дальнейшую компиляцию, выполнит SIGHUP все процессы компилятора, запущенные из него (надеюсь, что они также остановятся), а в качестве бонуса не требуется sudo, предполагая, что вы компилируете в качестве того же пользователя, которого вы зашли в систему в. И поскольку он убивает фактическую причину вашей проблемы вместо вашего веб-браузера, X-сессии или некоторого процесса наугад, это не будет мешать тому, что вы делали в системе в то время.

11
ответ дан 18 July 2018 в 10:47

Вы можете использовать следующую команду (если необходимо, несколько раз), чтобы убить процесс, используя большую ОЗУ в вашей системе:

ps -eo pid --no-headers --sort=-%mem | head -1 | xargs kill -9

С помощью:

ps -eo pid --no-headers --sort=-%mem: display Идентификаторы процессов всех запущенных процессов, отсортированные по использованию памяти head -1: сохраняют только первую строку (процесс использует большую часть памяти) xargs kill -9: убить процесс

Изменить после точного комментария Дмитрия:

Это быстрое и грязное решение, которое должно выполняться, когда нет проблемных задач (задачи, которые вы не хотите kill -9).

14
ответ дан 18 July 2018 в 10:47

Вы сказали «компиляция в фоновом режиме». Что вы делаете на переднем плане? Если это вы разрабатываете с помощью Eclipse или другого ресурса с тяжелой IDE, проверьте, правильно ли оно завершено в консоли.

Среда разработки часто позволяет запускать несколько процессов в процессе разработки, они могут оставаться висящими и после того, дольше их интересует (в отладчике или просто неправильно завершена). Если разработчик не обращает внимания, десятки забытых процессов могут накапливаться в течение дня, используя несколько гигабайт.

Проверьте, прекращено ли все, что должно быть завершено в среде IDE.

1
ответ дан 18 July 2018 в 10:47

По моему опыту, Firefox и Chrome используют больше оперативной памяти, чем мои первые 7 компьютеров. Наверное, более того, но я ухожу от своей точки зрения. Самое первое, что вам нужно сделать, это закрыть браузер. Команда

killall -9 firefox google-chrome google-chrome-stable chromium-browser

Я связал самые популярные браузеры вместе в одну команду, но, очевидно, если вы используете что-то еще (или знаете, что не используете один из них), просто измените команда. [F2] - важный бит. Люди действительно получают информацию о SIGKILL (сигнал № 9), но браузеры чрезвычайно устойчивы. Более того, медленное завершение через SIGTERM будет означать, что браузер выполняет загрузку очищающего мусора, что требует всплеска дополнительной ОЗУ, и это то, что вы не можете себе позволить в этой ситуации.

Если вы не может попасть в уже запущенный терминал или диалог Alt + F2, подумайте о переходе на TTY. Control + Alt + F2 приведет вас к TTY2, который должен позволить вам войти в систему (хотя это может быть медленным), и даже позволить вам использовать что-то вроде htop для отладки проблемы. Я не думаю, что у меня когда-либо закончилась оперативная память до такой степени, что я не смог получить htop.

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

84
ответ дан 18 July 2018 в 10:47

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

Я бы рекомендовал отключить подкачку во время выполнения этой задачи, чтобы убийца из памяти не работал, как только ОЗУ

Альтернативные решения:

Увеличьте скорость чтения для свопа, поместив ваш раздел подкачки в RAID1 или RAID0, если вы чувствуете себя рискованно, но это приведет к большому количеству если какие-либо из ваших дисков не работают. Уменьшите количество параллельных заданий сборки («больше ядер = больше скорости», мы все говорим, забывая, что он требует линейных потерь в ОЗУ). Это может идти в обоих направлениях, но попробуйте включить zswap в ядре. Это сжимает страницы перед их отправкой на swap, что может обеспечить достаточно пространство для маневра, чтобы ускорить работу вашего компьютера. С другой стороны, это может просто стать препятствием для дополнительной компрессии / декомпрессии. Уменьшите оптимизацию или используйте другой компилятор. Оптимизация кода иногда может занимать несколько гигабайт памяти. Если вы включили LTO, вы также будете использовать много оперативной памяти на этапе соединения. Если все остальное не удается, вы можете попытаться скомпилировать свой проект с помощью компилятора с более легким весом (например, tcc), за счет небольшой производительности во время выполнения компилируемого продукта. (Обычно это приемлемо, если вы делаете это для целей разработки / отладки.)
20
ответ дан 18 July 2018 в 10:47

Еще одна вещь, которую можно сделать, - освободить кеш страницы памяти с помощью этой команды:

echo 3 | sudo tee /proc/sys/vm/drop_caches

Из документации kernel.org (выделено мной):

drop_caches Запись в это приведет к тому, что ядро ​​удалит чистые кеши, а также извлекаемые объекты сляба, такие как зубцы и иноды. Когда они упали, их память становится бесплатной. Чтобы освободить pagecache: echo 1> / proc / sys / vm / drop_caches Чтобы освободить объекты slabable slab (включая dentries и inodes): echo 2> / proc / sys / vm / drop_caches Чтобы освободить объекты slab и pagecache: echo 3> / proc / sys / vm / drop_caches Это не разрушительная операция и не будет освобождать любые грязные объекты. Чтобы увеличить количество объектов, освобожденных этой операцией, пользователь может запустить `sync 'перед записью в / proc / sys / vm / drop_caches. Это позволит свести к минимуму количество грязных объектов в системе и создать больше кандидатов для удаления.
3
ответ дан 18 July 2018 в 10:47

sudo swapoff -a отключит своп, заставляя ядро ​​автоматически убить процесс с наивысшим результатом, если в системе заканчивается память. Я использую это, если знаю, что у меня будет какая-то RAM-тяжелая, которую я бы предпочел убить, если она выйдет из-под контроля, а не поменять ее на своп и застрять навсегда. Используйте sudo swapon -a, чтобы снова включить его.

Позже вы можете взглянуть на свои настройки свопинга. Похоже, ваш своп находится на том же диске, что и корневой раздел, что замедлит вашу систему, когда вы нажмете swap, поэтому избегайте этого, если сможете. Кроме того, на мой взгляд, современные системы часто настраиваются со слишком большим количеством свопов. 32GiB RAM обычно означает, что по умолчанию выделяется своп 32GiB, как если бы вы действительно хотели разместить 32GiB в свое пространство подкачки.

2
ответ дан 18 July 2018 в 10:47

В системе с включенным ключом запроса Magic System, нажав Alt + System Request + f (если на вашей клавиатуре не отмечено, системный запрос часто находится на кнопке Print Screen) будет вручную вызывать убийцу ядра из памяти (oomkiller ), который пытается выбрать худший оскорбительный процесс для использования памяти и убить его. Вы можете сделать это, если у вас, возможно, меньше времени, чем вы описали, и система вот-вот начнется (или, возможно, уже началась) измельчение - в этом случае вам, вероятно, все равно, что убили, просто чтобы вы закончили с помощью используемой системы. Иногда это может привести к убийству X, но большую часть времени в эти дни намного лучше выбирать плохой процесс, чем это было раньше.

66
ответ дан 18 July 2018 в 10:47

Прежде чем запускать ваши ресурсы для использования ресурсов, вы также можете использовать системный вызов setrlimit (2), возможно, с встроенным ulimit встроенной оболочкой bash (или limit, встроенной в zsh), в частности с -v для RLIMIT_AS. Затем слишком большое потребление виртуального адресного пространства (например, с помощью mmap (2) или sbrk (2), используемое malloc (3)) потерпит неудачу (с errno (3) будет ENOMEM).

Затем они ( то есть голодные процессы в вашей оболочке после того, как вы набрали ulimit), будут прекращены до замораживания вашей системы.

Читайте также setrlimit (2) и рассмотрите возможность отключения избыточной памяти (по запуская команду echo 0 > /proc/sys/vm/overcommit_memory как root, см. ulimit, встроенный в вашу оболочку bash ...).

11
ответ дан 24 July 2018 в 19:38

Одним из способов быстрого получения фрагмента свободной оперативной памяти является использование zram, который создает сжатый RAM-диск и меняет местами. С любым полуприличным процессором это намного быстрее, чем обычная своп, и скорость сжатия довольно высока при использовании многих современных RAM-свиней, таких как веб-браузеры.

Предполагая, что у вас установлен zram и настроен, все, что вам нужно do to run

sudo service zramswap start
4
ответ дан 24 July 2018 в 19:38
  • 1
    Это работает на всех файловых системах, таких как btrfs? – Akiva 4 July 2017 в 16:10
  • 2
    @Akiva zram никогда не касается диска, поэтому я бы сказал, да;) – Dmitry Grigoryev 4 July 2017 в 16:31

Создайте еще какую-нибудь своп для себя.

Следующее добавит 8G swap:

dd if=/dev/zero of=/root/moreswap bs=1M count=8192 mkswap /root/moreswap swapon /root/moreswap

Он все равно будет медленным (вы меняете), но вы не должны на самом деле закончились. Современные версии Linux могут свопиться к файлам. О единственном использовании для раздела подкачки в эти дни для спячки вашего ноутбука.

9
ответ дан 24 July 2018 в 19:38
  • 1
    Фактически, этот метод реализован как сценарий здесь . Весьма полезно для добавления swap на лету. – Sergiy Kolodyazhnyy 3 July 2017 в 18:17
  • 2
    Некоторая свопа, как правило, мудрая, но выделение больших количеств просто позволяет машине трэш больше до того, как убийца OOM входит и выбирает добровольца. Серая старая роль большого пальца вокруг «удвоить ваш баран, как своп». давно мертв. Лично я не вижу никакой ценности при распределении общей суммы обмена более ~ 1 ГБ. – Criggie 4 July 2017 в 04:39
  • 3
    С помощью ext4 вы можете fallocate -l 8G /root/moreswap вместо dd, чтобы избежать необходимости делать 8GB ввода-вывода во время работы системы. Однако это не работает с какой-либо другой файловой системой. Определенно не XFS, где swapon видит неписанные экстенты как дыры. (Я думаю, что это обсуждение списка рассылки xfs не вышло). См. Также swapd , демон, который создает / удаляет файлы подкачки «на лету», чтобы сохранить дисковое пространство. Также askubuntu.com/questions/905668/… – Peter Cordes 4 July 2017 в 10:47
  • 4
    @Criggie & quot; Лично я не вижу никакой ценности при распределении суммарного общего обмена более ~ 1 ГБ & quot; - Вы пытались создать Firefox? – Dmitry Grigoryev 4 July 2017 в 16:03
  • 5
    @Akiva В прошлый раз, когда я проверил, рекомендуемая конфигурация сборки была 16 ГБ ОЗУ. Основной исполняемый файл (xul.dll) составляет около 50 МБ, поэтому он примерно в 10 раз тяжелее ядра Linux. – Dmitry Grigoryev 4 July 2017 в 16:40
это случается довольно часто для меня, когда я компилирую программное обеспечение в фоновом режиме

. В этом случае что-то вроде «killall -9 make» (или что вы используете для управления своей компиляцией, если не сделать ). Это остановит дальнейшую компиляцию, выполнит SIGHUP все процессы компилятора, запущенные из него (надеюсь, что они также остановятся), а в качестве бонуса не требуется sudo, предполагая, что вы компилируете в качестве того же пользователя, которого вы зашли в систему в. И поскольку он убивает фактическую причину вашей проблемы вместо вашего веб-браузера, X-сессии или некоторого процесса наугад, это не будет мешать тому, что вы делали в системе в то время.

11
ответ дан 24 July 2018 в 19:38
  • 1
    «Это просто позор, который мне пришлось прокрутить до сих пор, чтобы найти этот ответ. Я надеялся, что кто-то предложит способ, который приостанавливает прогресс в отношении этого ОЕМ. – TOOGAM 6 July 2017 в 05:46
  • 2
    Это не что иное, как ответ, который ожидает OP, но он отвечает на вопрос литературный: моя машина дерьма оказывается непригодной для использования, когда я на ней нахожусь, - прекратите строить на дерьмовой машине. – 9ilsdx 9rvj 0lo 7 July 2017 в 17:00

Вы можете использовать следующую команду (если необходимо, несколько раз), чтобы убить процесс, используя большую ОЗУ в вашей системе:

ps -eo pid --no-headers --sort=-%mem | head -1 | xargs kill -9

С помощью:

ps -eo pid --no-headers --sort=-%mem: display Идентификаторы процессов всех запущенных процессов, отсортированные по использованию памяти head -1: сохраняют только первую строку (процесс использует большую часть памяти) xargs kill -9: убить процесс

Изменить после точного комментария Дмитрия:

Это быстрое и грязное решение, которое должно выполняться, когда нет проблемных задач (задачи, которые вы не хотите kill -9).

14
ответ дан 24 July 2018 в 19:38
  • 1
    Это намного хуже, чем позволить убийце OOM справиться с ситуацией. Убийца OOM гораздо умнее, чем это. Вы действительно запускаете такие команды на компьютере с текущими компиляциями? – Dmitry Grigoryev 4 July 2017 в 16:08
  • 2
    @DmitryGrigoryev так умно, что иногда убивает Xorg на моем рабочем столе. В современных ядрах OOMK, похоже, приобрел некоторую здравомыслие, но на самом деле я бы не стал им доверять. – Ruslan 8 July 2017 в 22:17

Вы сказали «компиляция в фоновом режиме». Что вы делаете на переднем плане? Если это вы разрабатываете с помощью Eclipse или другого ресурса с тяжелой IDE, проверьте, правильно ли оно завершено в консоли.

Среда разработки часто позволяет запускать несколько процессов в процессе разработки, они могут оставаться висящими и после того, дольше их интересует (в отладчике или просто неправильно завершена). Если разработчик не обращает внимания, десятки забытых процессов могут накапливаться в течение дня, используя несколько гигабайт.

Проверьте, прекращено ли все, что должно быть завершено в среде IDE.

1
ответ дан 24 July 2018 в 19:38

По моему опыту, Firefox и Chrome используют больше оперативной памяти, чем мои первые 7 компьютеров. Наверное, более того, но я ухожу от своей точки зрения. Самое первое, что вам нужно сделать, это закрыть браузер. Команда

killall -9 firefox google-chrome google-chrome-stable chromium-browser

Я связал самые популярные браузеры вместе в одну команду, но, очевидно, если вы используете что-то другое (или знаете, что не используете один из них), просто измените команда. [F2] - важный бит. Люди действительно получают информацию о SIGKILL (сигнал № 9), но браузеры чрезвычайно устойчивы. Более того, медленное завершение через SIGTERM будет означать, что браузер выполняет загрузку очищающего мусора, что требует всплеска дополнительной ОЗУ, и это то, что вы не можете себе позволить в этой ситуации.

Если вы не может попасть в уже запущенный терминал или диалог Alt + F2, подумайте о переходе на TTY. Control + Alt + F2 приведет вас к TTY2, который должен позволить вам войти в систему (хотя это может быть медленным), и даже позволить вам использовать что-то вроде htop для отладки проблемы. Я не думаю, что у меня когда-либо закончилась оперативная память до такой степени, что я не смог получить htop.

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

84
ответ дан 24 July 2018 в 19:38
  • 1
    Комментарии не предназначены для расширенного обсуждения; этот разговор был перемещен в чат . – Thomas Ward♦ 5 July 2017 в 20:23
  • 2
    Я получил пару команд, связанных с моей собственной командой lazygit, которую я использую время от времени, возможно, что-то подобное может быть применено здесь? Весь скрипт killall ... можно свести к простому emptyram или что-то вроде этого – Francisco Presencia 6 July 2017 в 02:40
  • 3
    Вам не нужно запускать полную команду, если вы знаете, какой браузер работает, и я предполагаю, что большинство людей, которые могут идентифицировать нехватку оперативной памяти, делают. В дополнение, мне было бы труднее вспомнить, что я написал сценарий emptyram, чем просто пробивать в killall -9 firefox. – Oli♦ 6 July 2017 в 19:41
  • 4
    Покупка ОЗУ ... почему бы просто не загрузить больше ОЗУ? – Stephan Bijzitter 7 July 2017 в 12:48
  • 5
    Ну, вы могли бы шутить, но если вам нужно что-то сделать в течение короткого времени, когда нуждается в , у вас будет больше RAM и CPU, а аренда VPS на минуту довольно экономична для однократных попыток. – Oli♦ 7 July 2017 в 13:15

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

Я бы рекомендовал отключить подкачку во время выполнения этой задачи, чтобы убийца из памяти не работал, как только ОЗУ

Альтернативные решения:

Увеличьте скорость чтения для свопа, поместив ваш раздел подкачки в RAID1 или RAID0, если вы чувствуете себя рискованно, но это приведет к большому количеству если какие-либо из ваших дисков не работают. Уменьшите количество параллельных заданий сборки («больше ядер = больше скорости», мы все говорим, забывая, что он требует линейных потерь в ОЗУ). Это может идти в обоих направлениях, но попробуйте включить zswap в ядре. Это сжимает страницы перед их отправкой на swap, что может обеспечить достаточно пространство для маневра, чтобы ускорить работу вашего компьютера. С другой стороны, это может просто стать препятствием для дополнительной компрессии / декомпрессии. Уменьшите оптимизацию или используйте другой компилятор. Оптимизация кода иногда может занимать несколько гигабайт памяти. Если вы включили LTO, вы также будете использовать много оперативной памяти на этапе соединения. Если все остальное не удается, вы можете попытаться скомпилировать свой проект с помощью компилятора с более легким весом (например, tcc), за счет небольшой производительности во время выполнения компилируемого продукта. (Обычно это приемлемо, если вы делаете это для целей разработки / отладки.)
20
ответ дан 24 July 2018 в 19:38
  • 1
    Если вы отключили своп, это поведение Linux, когда у вас закончилась нехватка памяти. Если Linux не вызывается из-за отказа от памяти, но вместо этого замораживается, это может означать, что есть проблемы с установкой. Конечно, если swap включен, поведение немного отличается. – Score_Under 3 July 2017 в 23:09
  • 2
    @Akiva Вы когда-нибудь пробовали без обмена? Этот ответ спот-на. Я хотел бы добавить, что запуск sudo swapoff -a может сэкономить вас, когда вы уже находитесь в привязке: он немедленно остановит любое дополнительное использование пространства подкачки, то есть убийца OOM следует вызвать в следующее мгновение и привести машину в работу заказ. sudo swapoff -a также является прекрасной мерой предосторожности при отладке утечек памяти или компиляции, скажем, firefox. Как правило, swap немного полезен (например, для спячки или замены реально загружаемого материала), но когда вы на самом деле используете память, зависания хуже. – Jonas Wielicki 4 July 2017 в 10:22
  • 3
    @Score_Under: Отдельные разделы подкачки на каждом диске должны быть значительно эффективнее, чем своп на устройстве md raid0. Я забываю, где я это читал. Linux RAID wiki рекомендует разделять разделы над raid0, но не говорит ничего очень сильного о том, почему это лучше . В любом случае да, RAID1 или RAID10n2 имеет смысл для обмена, особенно если вы в основном просто хотите, чтобы можно было поменять местами грязные, но очень холодные страницы, чтобы оставить больше памяти для pagecache. т. е. производительность подкачки не имеет большого значения. – Peter Cordes 4 July 2017 в 10:57
  • 4
    Я хочу сказать, что, следуя вашим советам, вы вообще не сможете запускать эти программы, потому что им нужна свопа. Сборка, которая не работает в течение 100% времени, хуже, чем сборка, у которой есть 50% шанс заблокировать систему, не так ли? – Dmitry Grigoryev 4 July 2017 в 20:17
  • 5
    Без swap на многих машинах невозможно скомпилировать большие куски кода. Почему вы предполагаете, что это компиляция, которую он хочет пожертвовать? – David Schwartz 5 July 2017 в 02:15

Еще одна вещь, которую можно сделать, - освободить кеш страницы памяти с помощью этой команды:

echo 3 | sudo tee /proc/sys/vm/drop_caches

Из документации kernel.org (выделено мной):

drop_caches Запись в это приведет к тому, что ядро ​​удалит чистые кеши, а также извлекаемые объекты сляба, такие как зубцы и иноды. Когда они упали, их память становится бесплатной. Чтобы освободить pagecache: echo 1> / proc / sys / vm / drop_caches Чтобы освободить объекты slabable slab (включая dentries и inodes): echo 2> / proc / sys / vm / drop_caches Чтобы освободить объекты slab и pagecache: echo 3> / proc / sys / vm / drop_caches Это не разрушительная операция и не будет освобождать любые грязные объекты. Чтобы увеличить количество объектов, освобожденных этой операцией, пользователь может запустить `sync 'перед записью в / proc / sys / vm / drop_caches. Это позволит свести к минимуму количество грязных объектов в системе и создать больше кандидатов для удаления.
3
ответ дан 24 July 2018 в 19:38
  • 1
    Интересно ... позаботиться об объяснении этой логики команд? – Akiva 3 July 2017 в 18:50
  • 2
    @Akiva в основном это говорит ядро ​​Linux, чтобы освободить ОЗУ. Это не избавляет от причины, которая убивает процесс оскорбления, поэтому ответ Оли является решением проблемы. Отбрасывание кешей предотвратит нехватку памяти в вашей системе, поэтому предотвратит ее замораживание, поэтому вы покупаете время, чтобы выяснить фактическую проблему. Вероятно, это будет немного быстрее, чем создание файла подкачки, особенно если вы находитесь на жестком диске, а не на SSD – Sergiy Kolodyazhnyy 3 July 2017 в 19:29
  • 3
    Кэш - это первое, что нужно сделать, когда вы заполняете память, поэтому я не думаю, что это очень поможет. На самом деле, я не думаю, что эта команда имеет практическое применение за пределами отладки поведения ядра или оптимизации времени дискретизации диска. Я бы смиренно рекомендовал не запускать эту команду в любой системе, нуждающейся в большей производительности. – Score_Under 3 July 2017 в 20:51
  • 4
    @Score_Under - & quot; Кэш - это первое, что нужно сделать, когда вы заполняете память & quot; - ну, это зависит от вашей настройки в /proc/sys/vm/swappiness . С изменчивостью, равной 0, вы правы. С настройкой по умолчанию 60, вы близки. Однако, если он установлен в 200, это будут наименее используемые страницы запущенных процессов, которые сначала будут отброшены ... в этом конкретном случае эта команда может быть полезной . Однако установление swappiness на 0 (или некоторое низкое значение, может быть, 20 или 30) было бы лучшим общим подходом. – Jules 4 July 2017 в 11:46
  • 5
    @Score_Under Эта команда была полезна для старых ядер с kswapd ошибкой (некоторые из них даже создали cronjobs с ней). Но вы правы, я сомневаюсь, что это поможет в этом вопросе. – Dmitry Grigoryev 4 July 2017 в 15:52

sudo swapoff -a отключит своп, заставляя ядро ​​автоматически убить процесс с наивысшим результатом, если в системе заканчивается память. Я использую это, если знаю, что у меня будет какая-то RAM-тяжелая, которую я бы предпочел убить, если она выйдет из-под контроля, а не поменять ее на своп и застрять навсегда. Используйте sudo swapon -a, чтобы снова включить его.

Позже вы можете взглянуть на свои настройки свопинга. Похоже, ваш своп находится на том же диске, что и корневой раздел, что замедлит вашу систему, когда вы нажмете swap, поэтому избегайте этого, если сможете. Кроме того, на мой взгляд, современные системы часто настраиваются со слишком большим количеством свопов. 32GiB RAM обычно означает, что по умолчанию выделяется своп 32GiB, как если бы вы действительно хотели разместить 32GiB в свое пространство подкачки.

2
ответ дан 24 July 2018 в 19:38
  • 1
    О, я просто видел, что кто-то прокомментировал это выше. – sudo 7 July 2017 в 20:03

В системе с включенным ключом запроса Magic System, нажав Alt + System Request + f (если на вашей клавиатуре не отмечено, системный запрос часто находится на кнопке Print Screen) будет вручную вызывать убийцу ядра из памяти (oomkiller ), который пытается выбрать худший оскорбительный процесс для использования памяти и убить его. Вы можете сделать это, если у вас, возможно, меньше времени, чем вы описали, и система вот-вот начнется (или, возможно, уже началась) измельчение - в этом случае вам, вероятно, все равно, что убили, просто чтобы вы закончили с помощью используемой системы. Иногда это может привести к убийству X, но большую часть времени в эти дни намного лучше выбирать плохой процесс, чем это было раньше.

66
ответ дан 24 July 2018 в 19:38
  • 1
    @ T.Sar, если вы идете прямо в обморок, вы уже либо проиграете, либо получите шанс убить людоеда. Вы ничего не выиграете, если просто воздержитесь от действий. – Ruslan 3 July 2017 в 14:26
  • 2
    @Muzer это будет работать только тогда, когда вы установили kernel.sysrq в 1 или число, включая правильный бит в вашем /etc/sysctl.d/10-magic-sysrq.conf. – Ruslan 3 July 2017 в 14:29
  • 3
    @ T.Sar. Вы не потеряете свой прогресс, если используете обычную систему сборки. Вы сохраните все объектные файлы, но тот, который вы на самом деле собираете, тогда вы сможете вернуться к тому, где вы остановились. – Muzer 3 July 2017 в 15:37
  • 4
    @ T.Sar Просто потому, что то, что вы компилируете, не является нормальным, не означает, что система сборки не является разумной. Системы сборки с незапамятных времен хранят файлы объектов для повторного использования в последующих сборниках. С другой стороны, я могу назвать много программных проектов с меньшим здравомыслием, чем Linux (что в целом довольно хорошо спроектировано). Например, компилируя что-то вроде Firefox или OpenOffice с 8 параллельными потоками сборки, я легко вижу, что это занимает порядка гигабайт ОЗУ. Существует также множество монолитных корпоративных систем, которые зависят от сотен библиотек. – Muzer 3 July 2017 в 15:55
  • 5
    @ T.Sar Linux не очень сложна из POV компилятора. На самом деле практически нет программ на C. Как насчет C ++? Вы когда-нибудь пробовали создавать программу с использованием Eigen или Boost? Вы были бы удивлены, сколько памяти компилятор иногда ест с такими программами - и они не должны быть сложными. – Ruslan 3 July 2017 в 16:00

Другие вопросы по тегам:

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