- Нехватка оперативной памяти в Linux на рабочем ПК: оптимизация и действия при зависании
- zram и приоритеты свопов
- Быстро вырубить программу, перегружающую ОЗУ. Запас ОЗУ для SSH
- Информация об оперативной памяти в Linux. Свободная, занятая и тип памяти
- Свободная и занятая оперативная память
- Команда free
- Команда vmstat
- Команда top
- Команда htop
- Файл /proc/meminfo
- Тип памяти и частота
- Заключение
- Сколько оперативки нужно для полноценной работы в Ubuntu
Нехватка оперативной памяти в Linux на рабочем ПК: оптимизация и действия при зависании
На любой операционной системе часто не хватает оперативной памяти. Рассмотрим, как и сэкономить на увеличении аппаратных ресурсов машины с 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.
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, то картинка будет такой:
В первую очередь будет свопиться в zram, то есть сжиматься внутри оперативной памяти без использования внешнего устройства для свопа, во вторую — использовать небольшой своп на SSD. Почти никогда не будет использоваться 6 ГБ свопа на HDD, однако они понадобятся, если я захочу отправить компьютер в спящий режим в условиях большой загрузки оперативной памяти. (На самом деле у меня отключен zram).
На офисных ПК с 4 ГБ ОЗУ (Xubuntu 16.04, 17.10) всегда ставлю пакет zram-config . Chromium, по наблюдениям, на глаз, очень хорошо сжимается в оперативной памяти, в результате чего zram позволяет сделать работу намного более комфортной без модернизации железа.
Быстро вырубить программу, перегружающую ОЗУ. Запас ОЗУ для 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-сервер.
Источник
Информация об оперативной памяти в Linux. Свободная, занятая и тип памяти
В этой статье мы рассмотрим, как получить информацию об оперативной памяти (RAM) в Linux.
Мы воспользуемся утилитами командной строки доступными для большинства Linux дистрибутивов.
Свободная и занятая оперативная память
Для получения информации о количестве свободной и занятой оперативной памяти в Linux можно использовать различные утилиты и команды. Рассмотрим несколько распространенных способов.
Команда free
Команда free очень простая, она выводит информацию о общем количестве оперативной памяти, о количестве занятой и свободной памяти, а также об использовании файла подкачки.
По умолчанию объем памяти выводится в килобайтах. Используя опции, можно выводить объем памяти в других форматах. Некоторые опции:
- -m — в мегабайтах
- -g — в гигабайтах
- -h — автоматически определить формат
Команда vmstat
Команда vmstat выводит различную статистику по использованию памяти. Используя ключ -s можно вывести подробную статистику в табличном виде.
Команда top
top — это утилита командной строки, которая используется для мониторинга процессов и используемых ресурсов компьютера.
Запуск утилиты top :
В заголовке выводится информация об использованной оперативной памяти.
Команда htop
Утилита htop, также как и top, используется для мониторинга ресурсов и процессов.
Для установки утилиты htop в Ubuntu Linux (Linux Mint и других Ubuntu/Debian-дистрибутивах) выполните команду:
Запуск утилиты htop :
Файл /proc/meminfo
Описанные выше команды, в качестве источника информации используют системные файлы из файлов, хранящихся в виртуальной файловой системе /proc . В файле /proc/meminfo содержится информация об использовании памяти. Выведем содержимое файла /proc/meminfo :
Тип памяти и частота
Рассмотрим, как получить информацию об установленных в компьютер модулях оперативной памяти. Воспользуемся командной dmidecode
Используем следующую команду:
В выводе команды будет информация о слотах оперативной памяти. Для каждого слота отображается установленный модуль оперативной памяти, его тип (поле Type ), размер (поле Size ), скорость/частота (поле Speed ) и другая информация.
В зависимости от системы и оборудования не всегда удается получить все данные, поэтому некоторые поля могут быть пустыми или иметь надписи Not provided/Unknown.
Заключение
Мы рассмотрели различные способы для просмотра информации о доступной и занятой оперативной памяти, а также показали, как вывести информацию об установленных модулях оперативной памяти.
Для отслеживания использования ресурсов компьютера существует множество графических программ. Найти их можно в нашем каталоге программ для Linux в разделе Система/Мониторинг.
Источник
Сколько оперативки нужно для полноценной работы в Ubuntu
Сейчас работаю (веду веб-разработку) под Виндой, при этом у меня открыто: Виртуальная машина с веб-сервером Centos (512 мб), Несколько (около 10-ти) экземпляров PhpStorm, Chrome с парой-тройкой десятков вкладок, 1С, Photoshop, и несколько других приложений.
Все это у меня съедает порядка 10 Гб оперативки.
Думаю о смене компа и переходе на Ubuntu — поэтому задался вопросом, сколько оперативки нужно будет там под приблизительно такую же работу, как и сейчас. Коллеги, кто ведет разработку под Ubuntu, подскажите пожалуйста?
Если будешь использовать контейнеры вместо виртуальных машин (LXC, docker, systemd-nspawn и т.д.), то можешь хорошо сэкономить оперативной памяти.
Ща достану счеты и врублю режим вагования, да посчитаю.
Вам же там завезли Убунту прям в винду, зачем виртуалка? И зачем тогда мигрировать и запускать не пойми как 1С, Photoshop и еще что-нибудь виндовое найдется.
Сколько оперативки? Она всегда вся уходит, 16 минимум — лишняя будет занята кешем, а это тоже хорошо.
С таким подходом 16гиг минимум одной планкой, чтоб была возможность апгрейда на 32-64.
Вам же там завезли Убунту прям в винду, зачем виртуалка? И зачем тогда мигрировать и запускать не пойми как 1С, Photoshop и еще что-нибудь виндовое найдется.
Кстати да, тоже тема, правда у себя не нашел Ubuntu, хоть у меня и 64- разрядная win10 — не работает не bash из командной строки, нет и самого приложения Ubuntu . перелопатил пол рунета, на сколько понял штука еще довольно сырая.
Хз, там вроде просто: в какой-то настройке указываешь «режим разработчика» и включаешь компонент в «Компонентах Windows». Так то из коробки её нету.
На опеннете инструкция по установке, со скринами, понятнее некуда.
Смотрю, выше уже писали про контейнеры. Сейчас в винде они вроде недоступны, но в *nix среде уже обыденность. Тебе нужно будет сломать себя и принять это. Ибо виртуалки, уже прошлый век для веб-разработки.
Несколько (около 10-ти) экземпляров PhpStorm
Куда тебе столько разом? Кодишь сразу во всех 10? Epic.
Ты должен понимать, что всякие фотошопы — из коробки не заведутся. И тут либо всякие wine и прочие кроссоверы. Либо виртуалка с виндой для её софта. Ещё можно найти аналоги или другие подходы. Например, мне нужен был фотошоп для вёрстки из PSD. Решил проблему облачным сервисом Assets от Adobe, ещё есть Avocode.
Никто не просчитает, сколько у тебя это всё будет отжирать в Ubuntu. Может и меньше, а может и больше. Нужно пробовать.
Думаю о смене компа и переходе на Ubuntu
Я как раз, тоже думаю о смене компа и перехода с Ubuntu на macOS.
Хз, там вроде просто: в какой-то настройке указываешь «режим разработчика» и включаешь компонент в «Компонентах Windows». Так то из коробки её нету.
На опеннете инструкция по установке, со скринами, понятнее некуда.
по этой инструкции делал https://msdn.microsoft.com/en-us/commandline/wsl/install_guide после шага по включению девелопер-режима ничего не работает — не находит в search «Turn Windows features on or off» не находит из консоли «Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux». Не знаю, наверное винда у меня глючная какая-то.
А так же хочу сказать, в чем плюс виртуалки с Centos — во первых для размещения сайтов клиентов использую VPS c той же Centos, и тем самым разрабатывая локально на ней же набираюсь опыта попутно.
Второе — если винда у меня в какой-то момент загнется, то диск виртуальной машины у меня всегда в backup со всеми сайтами, базами данными, nginx, настройками — да полностью среда разработки. А вот с «Bash on Ubuntu on Windows» если винда загнется внезапно, то это пипецкий пипец будет.
Куда тебе столько разом? Кодишь сразу во всех 10? Epic.
У меня помимо текущего разрабатываемого проекта (серверная часть), обычно открыто еще несколько ранее сделанных проектов (серверная часть), я туда подглядываю, как и чего делал в том или ином повторяющемся функционале. Плюс то же самое с (клиентская часть).
Я как раз, тоже думаю о смене компа и перехода с Ubuntu на macOS.
Нууу )) Мне не подходит, я постоянно работаю с 1С и прочими многими программами, которых нет на маке. А так же денег нет на такую роскошь))
Источник