Вероятно, это неправильное место, но я считаю, что вы хотите сделать:
apt-get -f install
Это очистит выдающиеся зависимости
Прежде чем запускать ваши ресурсы для использования ресурсов, вы также можете использовать системный вызов 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 ...).
Одним из способов быстрого получения фрагмента свободной оперативной памяти является использование zram, который создает сжатый RAM-диск и меняет местами. С любым полуприличным процессором это намного быстрее, чем обычная своп, и скорость сжатия довольно высока при использовании многих современных RAM-свиней, таких как веб-браузеры.
Предполагая, что у вас установлен zram и настроен, все, что вам нужно do to run
sudo service zramswap start
Создайте еще какую-нибудь своп для себя.
Следующее добавит 8G swap:
dd if=/dev/zero of=/root/moreswap bs=1M count=8192
mkswap /root/moreswap
swapon /root/moreswap
Он все равно будет медленным (вы меняете), но вы не должны на самом деле закончились. Современные версии Linux могут свопиться к файлам. О единственном использовании для раздела подкачки в эти дни для спячки вашего ноутбука.
. В этом случае что-то вроде «killall -9 make» (или что вы используете для управления своей компиляцией, если не сделать ). Это остановит дальнейшую компиляцию, выполнит SIGHUP все процессы компилятора, запущенные из него (надеюсь, что они также остановятся), а в качестве бонуса не требуется sudo, предполагая, что вы компилируете в качестве того же пользователя, которого вы зашли в систему в. И поскольку он убивает фактическую причину вашей проблемы вместо вашего веб-браузера, X-сессии или некоторого процесса наугад, это не будет мешать тому, что вы делали в системе в то время.
Вы можете использовать следующую команду (если необходимо, несколько раз), чтобы убить процесс, используя большую ОЗУ в вашей системе:
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).
Вы сказали «компиляция в фоновом режиме». Что вы делаете на переднем плане? Если это вы разрабатываете с помощью Eclipse или другого ресурса с тяжелой IDE, проверьте, правильно ли оно завершено в консоли.
Среда разработки часто позволяет запускать несколько процессов в процессе разработки, они могут оставаться висящими и после того, дольше их интересует (в отладчике или просто неправильно завершена). Если разработчик не обращает внимания, десятки забытых процессов могут накапливаться в течение дня, используя несколько гигабайт.
Проверьте, прекращено ли все, что должно быть завершено в среде IDE.
По моему опыту, 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-сервера в минуту или час - прекрасный выбор.
Вопреки другим ответам, я предлагаю отключить своп, пока вы это делаете. В то время как swap позволяет вашей системе работать предсказуемым образом и часто используется для увеличения пропускной способности приложений, обращающихся к диску (путем вытеснения неиспользуемых страниц, чтобы освободить место для кеша диска), в этом случае это звучит так, как будто ваша система замедляется на неиспользуемые уровни, потому что слишком сильно активно используемая память принудительно вытесняется для обмена.
Я бы рекомендовал отключить подкачку во время выполнения этой задачи, чтобы убийца из памяти не работал, как только ОЗУ
Альтернативные решения:
Увеличьте скорость чтения для свопа, поместив ваш раздел подкачки в RAID1 или RAID0, если вы чувствуете себя рискованно, но это приведет к большому количеству если какие-либо из ваших дисков не работают. Уменьшите количество параллельных заданий сборки («больше ядер = больше скорости», мы все говорим, забывая, что он требует линейных потерь в ОЗУ). Это может идти в обоих направлениях, но попробуйте включить zswap в ядре. Это сжимает страницы перед их отправкой на swap, что может обеспечить достаточно пространство для маневра, чтобы ускорить работу вашего компьютера. С другой стороны, это может просто стать препятствием для дополнительной компрессии / декомпрессии. Уменьшите оптимизацию или используйте другой компилятор. Оптимизация кода иногда может занимать несколько гигабайт памяти. Если вы включили LTO, вы также будете использовать много оперативной памяти на этапе соединения. Если все остальное не удается, вы можете попытаться скомпилировать свой проект с помощью компилятора с более легким весом (например, tcc), за счет небольшой производительности во время выполнения компилируемого продукта. (Обычно это приемлемо, если вы делаете это для целей разработки / отладки.)Еще одна вещь, которую можно сделать, - освободить кеш страницы памяти с помощью этой команды:
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. Это позволит свести к минимуму количество грязных объектов в системе и создать больше кандидатов для удаления.sudo swapoff -a отключит своп, заставляя ядро автоматически убить процесс с наивысшим результатом, если в системе заканчивается память. Я использую это, если знаю, что у меня будет какая-то RAM-тяжелая, которую я бы предпочел убить, если она выйдет из-под контроля, а не поменять ее на своп и застрять навсегда. Используйте sudo swapon -a, чтобы снова включить его.
Позже вы можете взглянуть на свои настройки свопинга. Похоже, ваш своп находится на том же диске, что и корневой раздел, что замедлит вашу систему, когда вы нажмете swap, поэтому избегайте этого, если сможете. Кроме того, на мой взгляд, современные системы часто настраиваются со слишком большим количеством свопов. 32GiB RAM обычно означает, что по умолчанию выделяется своп 32GiB, как если бы вы действительно хотели разместить 32GiB в свое пространство подкачки.
В системе с включенным ключом запроса Magic System, нажав Alt + System Request + f (если на вашей клавиатуре не отмечено, системный запрос часто находится на кнопке Print Screen) будет вручную вызывать убийцу ядра из памяти (oomkiller ), который пытается выбрать худший оскорбительный процесс для использования памяти и убить его. Вы можете сделать это, если у вас, возможно, меньше времени, чем вы описали, и система вот-вот начнется (или, возможно, уже началась) измельчение - в этом случае вам, вероятно, все равно, что убили, просто чтобы вы закончили с помощью используемой системы. Иногда это может привести к убийству X, но большую часть времени в эти дни намного лучше выбирать плохой процесс, чем это было раньше.
Прежде чем запускать ваши ресурсы для использования ресурсов, вы также можете использовать системный вызов 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 ...).
Одним из способов быстрого получения фрагмента свободной оперативной памяти является использование zram, который создает сжатый RAM-диск и меняет местами. С любым полуприличным процессором это намного быстрее, чем обычная своп, и скорость сжатия довольно высока при использовании многих современных RAM-свиней, таких как веб-браузеры.
Предполагая, что у вас установлен zram и настроен, все, что вам нужно do to run
sudo service zramswap start
Создайте еще какую-нибудь своп для себя.
Следующее добавит 8G swap:
dd if=/dev/zero of=/root/moreswap bs=1M count=8192
mkswap /root/moreswap
swapon /root/moreswap
Он все равно будет медленным (вы меняете), но вы не должны на самом деле закончились. Современные версии Linux могут свопиться к файлам. О единственном использовании для раздела подкачки в эти дни для спячки вашего ноутбука.
. В этом случае что-то вроде «killall -9 make» (или что вы используете для управления своей компиляцией, если не сделать ). Это остановит дальнейшую компиляцию, выполнит SIGHUP все процессы компилятора, запущенные из него (надеюсь, что они также остановятся), а в качестве бонуса не требуется sudo, предполагая, что вы компилируете в качестве того же пользователя, которого вы зашли в систему в. И поскольку он убивает фактическую причину вашей проблемы вместо вашего веб-браузера, X-сессии или некоторого процесса наугад, это не будет мешать тому, что вы делали в системе в то время.
Вы можете использовать следующую команду (если необходимо, несколько раз), чтобы убить процесс, используя большую ОЗУ в вашей системе:
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).
Вы сказали «компиляция в фоновом режиме». Что вы делаете на переднем плане? Если это вы разрабатываете с помощью Eclipse или другого ресурса с тяжелой IDE, проверьте, правильно ли оно завершено в консоли.
Среда разработки часто позволяет запускать несколько процессов в процессе разработки, они могут оставаться висящими и после того, дольше их интересует (в отладчике или просто неправильно завершена). Если разработчик не обращает внимания, десятки забытых процессов могут накапливаться в течение дня, используя несколько гигабайт.
Проверьте, прекращено ли все, что должно быть завершено в среде IDE.
По моему опыту, 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-сервера в минуту или час - прекрасный выбор.
Вопреки другим ответам, я предлагаю отключить своп, пока вы это делаете. В то время как swap позволяет вашей системе работать предсказуемым образом и часто используется для увеличения пропускной способности приложений, обращающихся к диску (путем вытеснения неиспользуемых страниц, чтобы освободить место для кеша диска), в этом случае это звучит так, как будто ваша система замедляется на неиспользуемые уровни, потому что слишком сильно активно используемая память принудительно вытесняется для обмена.
Я бы рекомендовал отключить подкачку во время выполнения этой задачи, чтобы убийца из памяти не работал, как только ОЗУ
Альтернативные решения:
Увеличьте скорость чтения для свопа, поместив ваш раздел подкачки в RAID1 или RAID0, если вы чувствуете себя рискованно, но это приведет к большому количеству если какие-либо из ваших дисков не работают. Уменьшите количество параллельных заданий сборки («больше ядер = больше скорости», мы все говорим, забывая, что он требует линейных потерь в ОЗУ). Это может идти в обоих направлениях, но попробуйте включить zswap в ядре. Это сжимает страницы перед их отправкой на swap, что может обеспечить достаточно пространство для маневра, чтобы ускорить работу вашего компьютера. С другой стороны, это может просто стать препятствием для дополнительной компрессии / декомпрессии. Уменьшите оптимизацию или используйте другой компилятор. Оптимизация кода иногда может занимать несколько гигабайт памяти. Если вы включили LTO, вы также будете использовать много оперативной памяти на этапе соединения. Если все остальное не удается, вы можете попытаться скомпилировать свой проект с помощью компилятора с более легким весом (например, tcc), за счет небольшой производительности во время выполнения компилируемого продукта. (Обычно это приемлемо, если вы делаете это для целей разработки / отладки.)Еще одна вещь, которую можно сделать, - освободить кеш страницы памяти с помощью этой команды:
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. Это позволит свести к минимуму количество грязных объектов в системе и создать больше кандидатов для удаления.sudo swapoff -a отключит своп, заставляя ядро автоматически убить процесс с наивысшим результатом, если в системе заканчивается память. Я использую это, если знаю, что у меня будет какая-то RAM-тяжелая, которую я бы предпочел убить, если она выйдет из-под контроля, а не поменять ее на своп и застрять навсегда. Используйте sudo swapon -a, чтобы снова включить его.
Позже вы можете взглянуть на свои настройки свопинга. Похоже, ваш своп находится на том же диске, что и корневой раздел, что замедлит вашу систему, когда вы нажмете swap, поэтому избегайте этого, если сможете. Кроме того, на мой взгляд, современные системы часто настраиваются со слишком большим количеством свопов. 32GiB RAM обычно означает, что по умолчанию выделяется своп 32GiB, как если бы вы действительно хотели разместить 32GiB в свое пространство подкачки.
В системе с включенным ключом запроса Magic System, нажав Alt + System Request + f (если на вашей клавиатуре не отмечено, системный запрос часто находится на кнопке Print Screen) будет вручную вызывать убийцу ядра из памяти (oomkiller ), который пытается выбрать худший оскорбительный процесс для использования памяти и убить его. Вы можете сделать это, если у вас, возможно, меньше времени, чем вы описали, и система вот-вот начнется (или, возможно, уже началась) измельчение - в этом случае вам, вероятно, все равно, что убили, просто чтобы вы закончили с помощью используемой системы. Иногда это может привести к убийству X, но большую часть времени в эти дни намного лучше выбирать плохой процесс, чем это было раньше.