Оперативная память зависает ubuntu
Меня часто раздражает Ubuntu, когда в оперативной памяти наблюдается пик - например, при запуске эмулятора Android Studio или при зависании вкладки Chrome - весь графический интерфейс зависает, и поэтому я вынужден либо ждать его возвращения, либо идти TTY и убить преступника.
Возможно ли, что Ubuntu управляет оперативной памятью совсем иначе, чем Windows? В Windows само приложение зависает, но не весь графический интерфейс. Есть ли способ заставить Ubuntu вести себя как Windows в этом отношении?
Быстро вырубить программу, перегружающую ОЗУ. Запас ОЗУ для SSH
Бывает такое, что даже при vm.swappiness=60 какому-то черту, как правило, браузеру, требуется очень много оперативной памяти, и система подвисает. Решается очень просто: сочетание клавиш Alt+SysRq(PrintScreen)+F заставляет oom_killer принудительно включиться и вырубить процесс, который на момент вызова занимает больше всего памяти. Строго 1 процесс на 1 вызов, и строго обязательно что-то будет убито. Если много раз подряд нажмете, то, скорее всего, перезапустится графическая сессия. Событие убиения процесса отражается в dmesg красным цветом.
Однако эта штука, называющаяся Magic SysRq, из коробки отключена в большинстве дистрибутивов, потому что непривилегированный пользователь может убить абсолютно любой процесс. За это отчечает параметр ядра kernel.sysrq , узнать его текущее значение можно так:
Для работы Alt+SysRq+F нужно kernel.sysrq=1. Для этого отредатируем параметры ядра, расположенные в файлах /etc/sysctl.conf (обычно симлинк на /etc/sysctl.d/99-sysctl.conf) и /etc/sysctl.d/*.conf. Лучше всего создать отдельный файл:
sudo nano /etc/sysctl.d/99-dumalogiya.conf
Нажмем Ctrl+O, Enter для сохранения.
В случае с браузером Chromium Alt+SysRq(PrintScreen)+F будет вырубать по одной вкладке, не закрывая сам браузер, что очень удобно.
Сочетания клавиш Magic SysRq перехватываются напрямую ядром Linux, поэтому работают даже когда из-за очереди процессора подвисает X-сервер.
vm.admin_reserve_kbytes — это размер оперативной памяти в килобайтах, который будет держаться гарантированно свободным для административных нужд, например, работы SSH. По умолчанию что-то около 8 МБ. Целесообразно увеличить, число 60192 почти от балды.
Это случается довольно часто со мной, когда я компилирую программное обеспечение в фоновом режиме, и внезапно все начинает замедляться и, в конечном итоге, зависать [если я ничего не делаю], так как у меня заканчивается как ОЗУ, так и пространство подкачки.
Этот вопрос предполагает, что у меня достаточно времени и ресурсов, чтобы открыть терминал Gnome, выполнить поиск по моей истории и выполнить один из них. sudo команда.
Какая команда может избавить меня от необходимости делать полную перезагрузку или вообще какую-либо перезагрузку?
По моему опыту, Firefox и Chrome используют больше оперативной памяти, чем мои первые 7 компьютеров вместе взятых. Вероятно, больше, чем это, но я ухожу от своей точки зрения. Самое первое, что вы должны сделать, это закрыть ваш браузер. Команда?
Я связал самые популярные браузеры в одну команду, но, очевидно, если вы запускаете что-то другое (или знаете, что вы не используете один из них), просто измените команду. killall -9 . это важный бит. Люди не понимают SIGKILL (сигнал № 9), но браузеры чрезвычайно устойчивы. Более того, медленно заканчивая через SIGTERM будет означать, что браузер загружает весь мусор, который требует огромного количества дополнительной оперативной памяти, и это то, что вы не можете себе позволить в этой ситуации.
Если вы не можете получить это в уже работающем терминале или в диалоге Alt + F2 , подумайте о переключении на TTY. Control + Alt + F2 приведет вас к TTY2, который должен позволить вам войти (хотя это может быть медленно) и даже позволит вам использовать что-то вроде htop отладить проблему. Я не думаю, что у меня когда-либо заканчивалось ОЗУ до такой степени, что я не мог получить htop вверх.
Долгосрочное решение подразумевает либо покупку большего количества оперативной памяти, аренду ее через удаленный компьютер, либо не выполнение того, что вы делаете в данный момент. Я оставляю сложные экономические аргументы на ваше усмотрение, но, в целом, оперативная память - это дешево, но если вам нужна только пакетная сумма, VPS-сервер, тарифицируемый за минуту, или час - это хороший выбор.
zram и приоритеты свопов
Рекомендую включить zram — прозрачное сжатие содержимого оперативной памяти. В Ubuntu это автоматизировано, достаточно установить пакет:
sudo apt install zram-config
Здесь и далее для дистрибутивов Rosa, Fedora все то же самое, но вместо zram-config —
Сервис systemd zram-config на Ubuntu будет автоматически добавлен в автозагрузку при установке пакета и запущен при перезагрузке системы. Для запуска вручную:
sudo systemctl start zram-config
sudo systemctl stop zram-config
Удаления из автозапуска:
sudo systemctl disable zram-config
Добавление в автозапуск:
sudo systemctl enable zram-config
При запуске zram-config берет число, равное 50% всего объема оперативной памяти, далее делает по одному виртуальному устройству /dev/zramN, где N начинается с 0, для каждого ядра процессора, а объем каждого /dev/zramN равен 50% всей оперативной памяти, деленному на количество ядер процессора. Так делалается для распараллеливания сжатия содержимого оперативной памяти по ядрам процессора; насколько я знаю, на современных ядрах Linux достаточно одного устройства /dev/zramN, а распараллелится оно само, но меня полностью устраивает искоробочная работа zram-config, и предпочитаю не лезть в нее руками.
Команда swapon -s выведет список всех задействованных свопов с указанием их приоритета. Первым используется тот своп, у которого приоритет выше. Если у вас уже есть дисковый своп и включен zram, то в случае с описанным выше пакетом-автокофигуратором приоритеты из коробки будут правильными. Например, у дискового свопа будет -1, а все /dev/zramN — 5. Таким образом, сначала используется zram, и только потом — диск.
Кстати, zram часто применяется на смартфонах, какую-либо на глаз заметную нагрузку на процессор при дефолтном методе сжатия lz4 он не создает.
Также приоритет свопа можно указать в /etc/fstab . Покажу на примере, как это сделано на моем рабочем компьютере с 6 ГБ ОЗУ.
Опцией монтирования pri=X заданы приоритеты свопов. Если еще включить zram, то картинка будет такой:
На офисных ПК с 4 ГБ ОЗУ (Xubuntu 16.04, 17.10) всегда ставлю пакет zram-config . Chromium, по наблюдениям, на глаз, очень хорошо сжимается в оперативной памяти, в результате чего zram позволяет сделать работу намного более комфортной без модернизации железа.
2 ответа
Современные ОС используют пейджинг для управления памятью. Это дает системе некоторые преимущества, такие как возможность использовать больше памяти, чем у вас физически, защищая некоторую чувствительную область памяти (например, зарезервированную память ядра), помимо прочего, на которую я могу сослаться, если вы хотите узнать больше о подкачке.
Я пропущу технические подробности и приведу аналогию. Представьте, что у вас есть коллекция энциклопедий, от А до Я, и, будучи любопытным человеком, вы любите проводить ее во второй половине дня, читая ее. Вы держите все энциклопедии на своей книжной полке, и у вас есть стол для чтения, на котором можно разместить 4 книги.
Однажды вы читаете о "Парусном спорте", о котором написано в энциклопедии буква S. В какой-то момент вам может понадобиться прочитать что-то еще, например, "Ветры" в букве W книги. Пока он у вас на столе для чтения, вы можете быстро открыть его и прочитать то, что вам нужно, а затем вернуться к книге "Парусный спорт". Проблема в том, что ваш стол для чтения может вместить только 4 книги, и велика вероятность, что вам понадобится книга, которой еще нет. Затем вам нужно будет взять одну из книг со стола обратно на полку, взять книгу, которая вам нужна, к столу для чтения и прочитать ее.
Хорошо, как эта целая книжная история связана с моими замораживаниями? Ну, компьютер делает что-то подобное все время. Чтобы иметь возможность использовать больше памяти, чем физически, компьютер делит память на страницы, которые представляют собой небольшие непрерывные блоки памяти. Они не должны постоянно находиться в оперативной памяти ("таблица чтения"), они могут храниться на вашем диске ("книжная полка"). Если ОЗУ заполнено, и ЦПУ требуется для чтения / записи на этих страницах, хранящихся на диске, одна из страниц в ОЗУ будет сохранена на диске, а запрошенная страница будет загружена в ОЗУ.
Это работа ядра, поэтому она прозрачна для пользователя и программ. Но поскольку чтение и запись на диск намного медленнее, чем чтение и запись в ОЗУ, вы заметите эти зависания.
В Linux есть раздел под названием swap, который используется для хранения этих дополнительных страниц. Windows делает то же самое, но я думаю, что он использует файл. Само ядро системы не будет зависать, так как оно будет на заблокированных ("не подлежащих замене") страницах.
Изображение ниже (из статьи в Википедии) иллюстрирует концепцию подкачки (и виртуальной памяти, в которую нам не нужно вдаваться). Эти блоки представляют страницы, размещаемые как в памяти, так и на диске.
Я полагаю, что причина, по которой это может выглядеть так, будто Linux тоже зависает, заключается в том, что Unity (графический интерфейс рабочего стола) может испытывать задержки, вызванные этой заменой, в то время как в Windows они могут сохранять код графического интерфейса рабочего стола на заблокированных ("не заменяемых") страницах., Это всего лишь теория мозгового штурма.
Есть ноут ASUS X551CA В нем 4гб ОЗУ Стоит последняя xubuntu (ставил через ubuntu minimal cd) Сначала сделал 8гб подкачки, все работало нормально, но жутко тормозно - вкладки в хроме переключались по 3-5 секунд, программы открывались и закрывались по 10-20 секунд и просто были фризы по 2-4 секунды Надоела такое быстродействие, убрал подкачку, все стало работать существеннее быстрее, но спустя 2-4 часа после включения ноута и работы на нем он зависал намертво, при этом я работаю чисто в хроме с 10-20 вкладками, иногда filezilla, sublime text, skype
При чем даже если я не открываю новые вкладки в хроме, все равно постепенно вся ОЗУ заполняется и комп зависает
Посоветуйте что-то пожалуйста
Очевидный firefox. У меня, когда сижу на ноуте с 4 гигами, chromium уводит в своп на жалких 20-30 вкладках. С файрфоксом и сотня норм.
С таким объемом рамы работать без подкачки смысла нет. Самый неприхотливый браузер на мой взгляд форк фаерфокса Seamonkey. Забивает память скорее всего кеш, который по идее и должен сбрасываться в подкачку, хотя ХЗ конечно. Я если хочу освободить быстро кеш памяти пользуюсь таким скриптом:
вся ОЗУ заполняется и комп зависает
Что конкретно сжирает память?
в общем стал юзать firefox - проблема решилась, хотя быстродействие самого браузера ниже чем у хрома желания дальше разбираться особо нет) спасибо
вВаш КО:
файл подкачки на 2ГБ
Попробуй включить zswap. На моём буке с 4 гигами на debian с kde5 можно одновременно включить firefox с 30 вкладками и хром с тем же количеством и ничего не затупит.
Включи обратно подкачку, а тормозит со свопом и вешается без него из-за
даже если я не открываю новые вкладки в хроме, все равно постепенно вся ОЗУ заполняется
У тебя что-то течёт, исправляй.
Зависает ubuntu на ноутбуке с 4GB ОЗУ
Какая версия ядра? Попробуй уменьшить количество памяти :)
Честно, после апгрейда RAM до 4G до сих пор сижу с опцией ядра mem=3G из-за непонятного глюка - при 4G после съедания всей памяти под buffer/cache комп выключается.
В 4.7 вроде вылечили, но появились другие баги :(
P.S. Да, intel/встройка, swap-а нет.
ты задолбал. причём здесь озу?
Ну дратути, на ощуп уже познал, что своп нужно отключать, и чем быстрее, тем лучше; что система зависнет если память закончится тоже познал, теперь пути только 2: 1) в магазин за памятью 2) работать в 1-3 вкладках и не дергаться.
система зависнет если память закончится
А как же OOM-киллер, почему не срабатывает? Уверен, что на него потрачена куча человеко-часов. И что? Всё напрасно? Убить одно жирное приложение явно лучше, чем вешать всю систему.
У меня такой же ноут и такие же зависания на всех линуксах , выпущеных после января 2015 . Но старые дистрибутивы работают хорошо . Главное не качать обновления . На вашем ноуте гарантировано будет работать debian 8.6 , mint 17.1 , ubuntu 14.04 . Только не вздумайте качать обновления
симптоматика примерно такая (в условном порядке)
запускаю виртуалку в wmvare player (в настройках стоит использовать 2 ГБ оперативки)
запускаю firefox (довольно много вкладок)
открываю пару страниц в facebook (самый показательный в плане яваскрипт-говнокода сайт, как по мне)
все начинает адски тормозить (хотя htop показывает что из 3гб оперативки занято примерно 2,7 + всего лишь около 1,5гб из свопа)
facebook-страницы грузятся-недогрузятся
firefox начинает выбрасывать одно за другим окна «скрипт такойто завис. остановить?» (при этом сами эти окна отвечают на «да» до минуты)
курсор мыши становится паралитиком
система перестает отвечать на мышь-клавиатуру (в т.ч. не переключается на консоль), системные часы в трее замирают
.
посмотрел вроде бы по всем свежим логам в /var/log/ в районе времени, «замершего» на экране - никакой объясняющей информации, ни ошибок, ничего говорящего (ну или я не особо компетентен)
вопросы:
- что это может быть?
- как сделать так, чтобы это перестало быть?
Апгрейт железа невозможен в принципе (на всякий случай).
Вопрос на самом деле очень важный и актуальный для меня, посему испрашиваю совета.
При выходе в своп всегда будут тормоза, но на всякий случай проверьте, что планировщик диска выставлен CFQ, а не deadline. Последние убунты любят по умолчанию выставлять второй, который больше подходит для SSD, а на HDD приводит к тормозам при активном I/O.
спасибо за совет - вроде бы пока что немного полегчало
еще погоняю в течении дня, посмотрю, потом в граб допилю есличто
к сожалению фокс действительно тормозит при открывании некоторых страниц, особенно если много кода на яваскрипт в странице, или у вас запущены аддоны-пожиратели, типа addblock и все семейство блокировщиков, vidеоdownloadhelper и еще куча расширений, которые убивают фокс. Поставьте флеш блокировщик. Если память позволяет, сделайте кеш в tmpfs и оптимизируйте что можно, фокс в этом плане очень гибкий. Очень хороший результат дает перевод профиля в tmpfs, но возни много. В конце концов попробуйте альтернативу - я vivaldi юзаю
в общем не взлетел ваш вариант
в течении примерно 10 часов все работало как часы (с допустимыми тормозами) - виртуалка + браузер + гонял видео и т.д.
После этого сначала firefox начал выдавать окошки скрипт не отвечает
убил процеес firefox-а, стало легче
запустил firefox заново
то же самое - ФБ страницу даже не догрузил. Поболтался полчаса - и система зависла намертво.
Какие могут быть варианты еще?
понимаете, я к тому, что ОС так работать не должна
сейчас лагает ФФ - а если завтра нужно будет поставить еще несколько корявых программ?
К тому же без запущенной виртуалки ФФ отрабатывал вполне сносно, что как бы намекает на что-то, не знаю только на что.
Альтернатива - да, есть. Называется Windows 7 - вообще не было никаких проблем, на этом же железе крутились 2-3 виртуалки одновременно + пара инстансов Фаерфокса с кучей вкладок в каждом + еще огромное количество софта.
Но я пока что хочу опробовать все возможные способы на этой платформе.
На любой операционной системе часто не хватает оперативной памяти. Рассмотрим, как и сэкономить на увеличении аппаратных ресурсов машины с Linux, и продолжить более-менее комфортно пользоваться компьютером с Linux в условиях нехватки памяти.
Типична такая ситуация: есть своп (swap, раздел подкачки), который начинает использоваться при нехватке оперативной памяти, и размещен он на HDD, то есть жестком диске с низкой скоростью чтения информации. В таких ситуациях операционная система начинает тормозить, подвисает курсор мыши, сложно переключиться в соседнюю tty и т.д. Почему? Потому что планировщик ядра Linux не может выполнить запрос на какое-то действие в запущенной программе, пока не получит доступ к ее оперативной памяти, выполнить следующее действие тоже не может, образовывается очередь из запросов на чтение с диска, и система «подвисает» именно потому, что обработка очереди происходит гораздо медленнее, чем этого хочет пользователь.
Если в такой момент запустить htop или uptime , то показатель Load Average (LA) будет очень высоким, несмотря на низкую загруженность ядер процессора. Сочетание высокого Load Average и низкой загрузки процессора говорят о забитой очереди процессора.
Часто в интернете советуют изменить параметр ядра Linux vm.swappiness . Узнать его текущее значение на вашей системе можно так:
Ответ будет 60 почти наверняка. Это значит, что ядро Linux начинает свопить редко используемые страницы оперативной памяти, когда использование свободной оперативной памяти достигает 100%-60%=40%. Часто встречаются рекомендации поставить, например, vm.swappiness=10, чтобы своп не начинал использоваться, пока загрузка ОЗу не достигнет 90%. На самом деле не нужно трогать vm.swappiness, вы не умнее разработчиков ядра Linux, которые не просто так поставили 60 по умолчанию. Почему?
Представьте, что у вас всего 4 ГБ оперативной памяти, из них прямо сейчас занято 3 ГБ, vm.swappiness=10, своп на жестком диске (HDD) занят на 0%, и вы открываете тяжелый сайт в браузере, для чего требуется больше, чем имеющийся свободный 1 ГБ, например, 2 ГБ. Операционная система начинает в экстренном порядке отправлять в своп как минимум 0.5 ГБ (а по факту больше), чтобы можно было выделить браузеру необходимое количество оперативной памяти. Эта процедура становится самой приоритетной задачей, и придется пожертвовать даже движениями курсора мыши, чтобы ее выполнить как можно быстрее. Вы ждете. Проходит 5 минут, и система развисает, потому что окончила процедуру 100% загрузки очереди доступа к медленному жесткому диску, на котором размещена оперативная память (своп). При дефолтном vm.swappiness=60 редко используемые страницы памяти сбрасываются в своп заблаговременно, и резкого зависания на 5-10 минут не происходит.
UPD. В комментарии подсказывают, что это не точное описание работы vm.swappiness.
Читайте также: