Это случается довольно часто со мной, когда я компилирую программное обеспечение в фоновом режиме, и внезапно все начинает замедляться и, в конечном итоге, зависать [если я ничего не делаю], так как у меня заканчивается как ОЗУ, так и пространство подкачки.
Этот вопрос предполагает, что у меня достаточно времени и ресурсов, чтобы открыть терминал Gnome, выполнить поиск по моей истории и выполнить одну sudo
команду.
Какая команда может избавить меня от необходимости делать полную перезагрузку или вообще какую-либо перезагрузку?
command-line
ram
freeze
swap
Акива
источник
источник
make
, попробуйте,-j4
например, для 4 параллельных сборок одновременно.Ответы:
По моему опыту, Firefox и Chrome используют больше оперативной памяти, чем мои первые 7 компьютеров вместе взятых. Вероятно, больше, чем это, но я ухожу от своей точки зрения. Самое первое, что вы должны сделать, это закрыть ваш браузер . Команда?
Я связал самые популярные браузеры в одну команду, но, очевидно, если вы запускаете что-то другое (или знаете, что вы не используете один из них), просто измените команду. Это
killall -9 ...
важный бит. Люди действительно сомневаютсяSIGKILL
(сигнал № 9), но браузеры чрезвычайно устойчивы. Более того, медленное завершение через viaSIGTERM
будет означать, что браузер загружает весь мусор, который требует огромного количества дополнительной оперативной памяти, и это то, что вы не можете себе позволить в этой ситуации.Если вы не можете получить это в уже работающем терминале или в диалоге Alt+ F2, подумайте о переключении на TTY. Control+ Alt+ F2приведет вас к TTY2, который должен позволить вам войти в систему (хотя это может быть медленно) и даже позволит вам использовать что-то вроде
htop
отладки проблемы. Я не думаю, что у меня когда-либо не хватало оперативной памяти до такой степени, что я не мог встатьhtop
.Долгосрочное решение подразумевает либо покупку большего количества оперативной памяти, аренду ее через удаленный компьютер, либо не выполнение того, что вы делаете в данный момент. Я оставляю сложные экономические аргументы на ваше усмотрение, но, в целом, оперативная память - это дешево, но если вам нужна только пакетная сумма, VPS-сервер, тарифицируемый за минуту, или час - это хороший выбор.
источник
lazygit
командой, которую я время от времени использую, может быть, что-то подобное можно применить здесь? Весьkillall ...
сценарий может быть сведен к простомуemptyram
или что-то в этом родеemptyram
Более того , мне было бы сложнее вспомнить, что я написал сценарий, чем просто пробитьkillall -9 firefox
.В системе с включенной клавишей Magic System Request Key нажатие Alt + System Request+ f(если оно не отмечено на клавиатуре, System Requestчасто находится на Print Screenклавише) вручную вызовет убийцу нехватки памяти в ядре (oomkiller), которая пытается выбрать самый неприятный процесс для пользователя. использование памяти и убить его. Вы можете сделать это, если у вас есть, возможно, меньше времени, чем вы описали, и система вот-вот начнет (или, возможно, уже начала) работать - в этом случае вас, вероятно, не волнует, что именно будет убито, просто вы закончите с удобной системой. Иногда это может закончиться убийством Х, но в большинстве случаев в наши дни гораздо лучше выбрать плохой процесс, чем раньше.
источник
kernel.sysrq
чтобы1
или номер , включая правильный бит в вашем/etc/sysctl.d/10-magic-sysrq.conf
.Вопреки другим ответам, я предлагаю вам отключить обмен, пока вы это делаете. В то время как подкачка поддерживает работу вашей системы предсказуемым образом и часто используется для увеличения пропускной способности приложений, обращающихся к диску (путем удаления неиспользуемых страниц, чтобы освободить место для дискового кэша), в этом случае кажется, что ваша система замедляется до непригодных уровней, потому что слишком активно используемая память принудительно вытесняется для замены.
Я бы порекомендовал отключить подкачку во время выполнения этой задачи, так что убийца нехватки памяти будет действовать, как только ОЗУ заполнится.
Альтернативные решения:
zswap
ядро. Это сжимает страницы до того, как они будут отправлены для обмена, что может обеспечить достаточно места для маневрирования, чтобы ускорить работу вашего компьютера. С другой стороны, это может просто стать помехой для дополнительной компрессии / декомпрессии, которую он делает.tcc
), за счет небольшого снижения производительности во время выполнения для скомпилированного продукта. (Обычно это приемлемо, если вы делаете это для целей разработки / отладки.)источник
sudo swapoff -a
может спасти вас, когда вы уже находитесь в привязке: он немедленно прекратит любое дополнительное использование пространства подкачки, то есть убийца OOM должен быть вызван в следующий момент и приведёт машину в рабочее состояние.sudo swapoff -a
Это также отличная мера предосторожности при отладке утечек памяти или компиляции, скажем, Firefox. Обычно подкачка немного полезна (например, для режима гибернации или замены действительно ненужных вещей), но когда вы на самом деле используете память, зависания хуже.Вы можете использовать следующую команду (при необходимости, несколько раз), чтобы завершить процесс, используя больше оперативной памяти в вашей системе:
С участием:
ps -eo pid --no-headers --sort=-%mem
: показать идентификаторы всех запущенных процессов, отсортированные по использованию памятиhead -1
: оставить только первую строку (процесс использует больше памяти)xargs kill -9
: убить процессИзменить после точного комментария Дмитрия:
Это быстрое и грязное решение, которое должно выполняться, когда не выполняются важные задачи (задачи, которые вам не нужны
kill -9
).источник
Перед запуском команд, потребляющих ресурсы, вы также можете использовать системный вызов setrlimit (2) , возможно, со
ulimit
встроенной оболочкой bash (илиlimit
встроенной в zsh), особенно с-v
forRLIMIT_AS
. Тогда слишком большое виртуальное потребление адресного пространства (например , с ттар (2) или sbrk (2) используется таНосом (3) ) не получится (с егто (3) бытьENOMEM
).Затем они (т. Е. Голодные процессы в вашей оболочке после того, как вы набрали текст
ulimit
) будут прерваны перед зависанием вашей системы.Читайте также Linux Ate My RAM и рассмотрите возможность отключения чрезмерного использования памяти (запустив команду
echo 0 > /proc/sys/vm/overcommit_memory
от имени root, см. Proc (5) ...).источник
В этом случае, что-то вроде «killall -9 make» (или что вы используете для управления вашей компиляцией, если не make). Это остановит дальнейшую компиляцию, SIGHUP запустит все процессы компилятора, запущенные из нее (возможно, и заставит их остановиться), и, в качестве бонуса, не нуждается в sudo, если вы компилируете под тем же пользователем, который вошел в систему. в качестве. И поскольку он убивает реальную причину вашей проблемы, а не ваш веб-браузер, сеанс X или какой-либо случайный процесс, он не будет мешать тому, что вы делали в системе в то время.
источник
Создайте еще один своп для себя.
Следующее добавит 8G свопа:
Это все еще будет медленным (вы меняете), но на самом деле вы не должны заканчиваться. Современные версии Linux могут заменять файлы. В наши дни единственным разделом для раздела подкачки является использование компьютера в спящем режиме.
источник
fallocate -l 8G /root/moreswap
вместо того,dd
чтобы избегать необходимости делать 8 ГБ ввода-вывода, пока система работает. Это не работает с любой другой файловой системой, хотя. Определенно не XFS, где swapon видит неписанные экстенты как дыры. (Я думаю, что это обсуждение списка рассылки xfs не сработало). Смотрите такжеswapd
, демон, который создает / удаляет файлы подкачки на лету для экономии места на диске. Также askubuntu.com/questions/905668/…xul.dll
) составляет около 50 МБ, поэтому он примерно в 10 раз тяжелее ядра Linux.Один из способов получить кусок свободной оперативной памяти в кратчайшие сроки - использовать zram , который создает сжатый RAM-диск и заменяет его. С любым полуприличным процессором это намного быстрее, чем при обычном обмене, и степень сжатия довольно высока для многих современных оперативных устройств, таких как веб-браузеры.
Предполагая, что у вас установлен и настроен zram, все, что вам нужно сделать, это запустить
источник
sudo swapoff -a
отключит своп, заставляя ядро автоматически убивать процесс с наибольшим количеством очков, если системе не хватает памяти. Я использую это, если знаю, что у меня будет что-то тяжелое в ОЗУ, которое я предпочел бы убить, если оно выйдет из-под контроля, чем позволить ему перейти в режим подкачки и застрять навсегда. Используйте,sudo swapon -a
чтобы включить его позже.Позже вы можете захотеть взглянуть на настройки свопинга. Похоже, ваш своп находится на том же диске, что и корневой раздел, что замедлит работу вашей системы, когда вы нажмете своп, поэтому избегайте этого, если можете. Также, на мой взгляд, современные системы часто настраиваются с помощью слишком большого количества операций подкачки. Оперативная память 32 ГБ обычно означает, что по умолчанию выделяется подкачка 32 ГБ, как если бы вы действительно хотели поместить 32 ГБ в пространство подкачки.
источник
Еще одно, что можно сделать, это освободить кеш страницы памяти с помощью этой команды:
Из документации на kernel.org (выделение добавлено):
источник
/proc/sys/vm/swappiness
. Если swappiness установлен в 0, вы правы. С настройкой по умолчанию 60, вы близки. Однако при значении 200 это будут наименее используемые страницы запущенных процессов, которые будут сброшены первыми ... в этом конкретном случае эта команда может быть полезна. Однако установка swappiness на 0 (или какое-то низкое значение, может быть, 20 или 30) будет лучшим общим подходом.kswapd
ошибкой (некоторые люди даже создавали cronjobs с ее помощью). Но вы правы, я сомневаюсь, что это поможет с этим вопросом.Вы сказали "компиляция в фоновом режиме". Что ты делаешь на переднем плане? Если вы разрабатываете с Eclipse или другой ресурсоемкой IDE, проверьте, все ли правильно завершено в консоли.
Среды разработки часто позволяют запускать несколько разрабатываемых процессов, они могут зависать даже после того, как вы их больше не интересуете (в отладчике или просто не завершены должным образом). Если разработчик не обратит внимания, десятки забытых процессов могут накапливаться в течение дня, используя несколько гигабайт вместе.
Проверьте, завершено ли все, что должно быть завершено в IDE.
источник