- Нехватка оперативной памяти в Linux на рабочем ПК: оптимизация и действия при зависании
- zram и приоритеты свопов
- Быстро вырубить программу, перегружающую ОЗУ. Запас ОЗУ для SSH
- Как узнать, какая установлена оперативная память и сколько слотов RAM занято в Linux
- Как использовать dmidecode для получения информации об установленной в системе оперативной памяти. Что означает вывод dmidecode
- Как с помощью lshw посмотреть информацию об оперативной памяти
- 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-сервер.
Источник
Как узнать, какая установлена оперативная память и сколько слотов RAM занято в Linux
Если вы хотите добавить память в компьютер или ноутбук либо заменить на более быструю, то нужно знать характеристики оперативной памяти, с которой ваша система может работать. Если вы хотите увеличить количество оперативной памяти, то важно подобрать модуль RAM со схожими характеристиками.
С настольными компьютерами это обычно нетрудно — можно снять крышку и посмотреть, какая модель памяти установлена, а затем поискать её характеристики в Интернете. Но с ноутбуками всё не так — довольно часто предустановленная оперативная память труднодоступна, даже если свободный слот для дополнительной памяти находится под люком быстрого доступа на задней крышке.
Итак, в этой статье мы научимся, как узнать, какая модель оперативной памяти установлена, какие у неё характеристики и сколько слотов занято в Linux. Мы познакомимся с несколькими программами для показа информации об оперативной памяти в Linux.
Если у вас Windows, то аналогичную инструкцию смотрите по ссылке «Как выбрать дополнительную оперативную память». Кстати, эта статья рекомендуется и пользователям Linux, если вы не можете найти в точности такую же модель RAM — в статье даются советы, на какие характеристики оперативной памяти особенно нужно обратить внимание при выборе дополнительных модулей ОЗУ.
Как использовать dmidecode для получения информации об установленной в системе оперативной памяти. Что означает вывод dmidecode
Первая утилита, с которой мы познакомимся, называется dmidecode. Если она отсутствует в вашей системе, то в Debian, Linux Mint, Ubuntu, Kali Linux и их производные программа устанавливается следующим образом:
В Arch Linux, BlackArch и производные утилита устанавливается так:
Для получения более расширенной информации об оперативной памяти запустите команду следующим образом:
Для более сжатой информации, выполните команду:
В этом выводе значение строк следующее:
- Maximum Capacity — максимально поддерживаемое системой количество оперативной памяти
- Number Of Devices — количество устройств, то есть сколько слотов памяти имеется. Будьте осторожны с этими значениями, особенно на ноутбуках, поскольку это значение берётся как количество слотов, которое может поддерживать материнская плата. Но производители могут принять решение, что вместо 4 возможных слотов RAM, они паяют только 2 слота. То есть в реальности слотов может быть меньшше.
- Size — объём оперативной памяти
- Form Factor — тип модуля, например, SODIMM — это оперативная память для ноутбуков (уменьшенный размер)
- Type — тип памяти, например, DDR4
- Speed — скорость, например, 2667 MT/s
- Manufacturer — производитель, например, Samsung
- Part Number — точное название модели оперативной памяти, например, M471A2K43CB1-CTD
- Minimum Voltage — минимальный вольтаж, например, 1.2 V
- Maximum Voltage — максимальный вольтаж, например, 1.2 V
- Configured Voltag — настроенный вольтаж, например, 1.2 V
Как с помощью lshw посмотреть информацию об оперативной памяти
Вторая программа, которая показывает модель оперативной памяти в Linux, это lshw. Если она отсутствует в вашей системе, то в Debian, Linux Mint, Ubuntu, Kali Linux и их производные программа устанавливается следующим образом:
В Arch Linux, BlackArch и производные утилита устанавливается так:
Чтобы показать модель, производителя и характеристики ОЗУ в Linux выполните команду:
Пример вывода информации об ОЗУ:
- size — это общий размер оперативной памяти в системе, либо размер данного модуля
- product — это точная модель ОЗУ, установленной в Linux
- vendor — производитель
- clock — частота
Как можно увидеть, имеется четыре bank (с 0 до 4) — то есть программа показывает, что в системе может быть четыре модуля оперативной памяти. Но на данной модели ноутбука имеется только два слота, следовательно, материнская плата поддерживает 4 слота ОЗУ, а на практике возможно установить только 2.
- description: [empty] означает, что данный слот пустой.
Источник
Ubuntu — оперативная память: проверка, тип, объем
Оперативная память (ОЗУ — оперативное запоминающее устройство или RAM — Random Access Memory ) — это та память, в которой хранятся исполняемые процессором программы — машинный код, файлы и любые данные для оперативной работы с ними, она энергозависима, то есть очищается при перезапуске или выключении ПК. При сохранении файла, после оперативной работы с ним, происходит его запись в ПЗУ — постоянное запоминающее устройство — жесткий диск или любой другой энергонезависимый накопитель.
От объема «оперативки» зависит количество программ или же, например, вкладок браузера, которые могут быть запущены одновременно в системе. Что интересно: при переходе компьютера в режим сна операционная система записывает весь массив данных, содержащихся в ОЗУ, в полном объеме (дамп) на жесткий диск, а после пробуждения эти данные возвращаются в «оперативку». Именно поэтому после выхода из режима сна мы получаем рабочее окружение с уже запущенными программами, которые были активны перед переходом в режим гибернации (сна).
Исходя из вышенаписанного следует вывод, что ОЗУ — важная часть компьютера, к информации о которой необходимо иметь доступ любому пользователю системы Ubuntu. Поэтому сегодня мы рассмотрим такие вопросы, как:
- Сколько доступно свободной оперативной памяти и каков ее полный объем
- Какой тип у установленной оперативной памяти
- Есть ли ошибки в оперативной памяти
Команды в статье приведены для исполнения их в терминале Ubuntu — Как открыть терминал
Объем оперативной памяти
Для того, чтобы получить информацию об общем объеме и количестве занятой/доступной памяти мы воспользуемся командой free с флагом -h поскольку при обычном выводе данной команды вывод объема производится в килобайтах, что не совсем удобочитаемо для пользователя. Флаг -h позволит отображать количественные единицы объема в мегабайтах и гигабайтах.
Исполним в терминале команду:
Вывод команды free -h в терминале Ubuntu
Как мы можем видеть — вывод команды дополнен, помимо данных об объемах ОЗУ, еще и информацией о файле подкачки. При необходимости данную команду можно использовать и для мониторинга за количеством оперативной памяти в реальном времени. Для этого нужно добавить к флагу -h еще один: -s [секунды]. Как аргумент к данному флагу указывается время в секундах, через которое следует обновлять информацию о состоянии памяти:
Вывод будет следующим:
Мониторинг ОЗУ через терминал
Обновленные данные в нашем примере будут выводиться каждые три секунды. Для того, чтобы закончить вывод данных в терминал следует нажать сочетание клавиш CTRL+C.
В моем примере наименования всех строк и столбцов самоочевидны, поскольку указаны на русском языке. Но при работе на удаленном сервере вывод команды, скорее всего, будет представлен на английском, поэтому я приведу краткую расшифровку подписей значений:
- Mem – физическая память
- Swap – виртуальная память
- total – общий объем ОЗУ
- used – кол-во занятой памяти
- free – свободная память
- shared – разделяемая память*
- buff/cache – зарезервированное системой место
*Разделяемая память (англ. Shared memory) является самым быстрым средством обмена данными между процессами. После создания разделяемого сегмента памяти любой из пользовательских процессов может подсоединить его к своему собственному виртуальному пространству и работать с ним, как с обычным сегментом памяти. (цитата из Wikipedia)
Тип и частота оперативной памяти
Необходимость узнать тип установленной оперативной памяти может возникнуть при покупке дополнительных модулей. Ведь различные типы модулей несовместимы между собой физически. То есть, модуль памяти DDR2 невозможно установить в разъем, например, для DDR3.
Частота ОЗУ означает — сколько циклов чтения/записи память способна выполнить за одну секунду. Обычно максимальная частота, на которой способна работать оперативная память, определяется процессором или чипсетом материнской платы.
Для того, чтобы узнать тип и частоту оперативной памяти используется следующая команда:
Вывод команды sudo dmidecode —type memory
В выводе команды присутствует информация о каждом установленном модуле памяти в отдельности. Для получения необходимой нам информации найдем в нем следующие строки:
В списке вывода это будет выглядеть следующим образом:
Handle 0x0043, DMI type 17, 40 bytes
Memory Device
Array Handle: 0x0041
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: ChannelA-DIMM1
Bank Locator: BANK 1
Type: DDR4
Type Detail: Synchronous
Speed: 2133 MT/s
Manufacturer: Kingston
Serial Number: 16334813
Asset Tag: 9876543210
Part Number: KHX2133C13D4/8GX
Rank: 2
Configured Clock Speed: 2133 MT/s
Minimum Voltage: Unknown
Maximum Voltage: Unknown
Configured Voltage: 1.2 V
Т.к. на ПК невозможно установить модули памяти с разным типом, а их частота обычно (при грамотной сборке ПК) совпадает, то, скорее всего, достаточно будет посмотреть информацию для любого из модулей в выводе команды.
Значение «Type» в данном выводе указывает на тип оперативной памяти (у меня в примере — DDR4), а «Speed» — на частоту (в моем примере 2133 мегатранзакции в секунду).
Для сокращения результатов вывода можно пропустить из через утилиту grep. Так, для поиска информации о типе ОЗУ можно выполнить команду:
Компактный вывод dmidecode
Как узнать количество планок оперативной памяти
Для того, чтобы узнать кол-во планок можно воспользоваться следующей командой:
Если lshw отсутствует в системе, то его можно установить командой:
Проверка оперативной памяти на наличие ошибок
Иногда можно столкнуться с поломкой полупроводников оперативной памяти. Обычно это выражается в нестабильной работе программ, зависаниях и т.п. Такие поломки способны повлиять на производительность оперативной памяти. Такую поломку устранить не получится, можно только заменить модуль на новый. Поэтому при зависаниях ПК или отдельных программ необходимо убедиться в целостности ОЗУ, чтобы не потратить деньги впустую, приобретя новые модули памяти взамен рабочим.
Для проверки оперативной памяти можно использовать программу MemTester. Чтобы ее установить нужно выполнить следующую команду в терминале:
Для примера запустим проверку блока ОЗУ, размером в 100 мегабайт состоящую из двух циклов:
Результат работы memtester
Данная проверка проводится для блока ОЗУ размером в 100МБ (указанных нами) два раза. Как видим у меня все в порядке. При использовании данной утилиты важно помнить, что нельзя указывать размер блока проверки больше, чем доступно свободной оперативной памяти на момент начала проверки.
Для более тщательного тестирования памяти можно воспользоваться утилитой memtest86+ из меню загрузчика Grub. Для того, чтобы попасть в меню Grub при запуске ПК следует держать нажатой клавишу Shift или, в некоторых случаях, ESC. Если загрузилось не меню, а консоль, то нужно выполнить команду normal.
Меню загрузчика Grub
После выбора пункта меню «Memory Test (memtest86+)» начнется проверка памяти:
Проверка памяти memtest86+
По окончанию первого цикла проверки снизу экрана будет отображена информация с результатами проверки:
Источник