Что делать если при перегрузке ОЗУ система начинает лагать а потом зависает и приходится перезагружать?

FedorAndreevich
swap вроде есть, следить приходится вручную
Так "вроде" или есть?

cat /proc/swaps
Если со свопом всё в порядке, сделай его использование менее агрессивным, потому что по умолчанию своп используется по серверному сценарию. Для этого в /etc/sysctl.conf добавь:
vm.swappiness=10
(По умолчанию этот параметр равен 60.)
Дальше обнови параметры: sysctl -p
Дальше, если у тебя hdd -- проследи, чтобы планировщик ввода-вывода был подходящий, например bfq. По умолчанию выставляется mq-deadline, что является оптимальным для ssd, но не hdd.
Ну и сам hdd должен быть не дешман на стопицод терабайт с черепичной записью, а нормальный. Проверь производителя и модель, спросив у Гугла. Если он с черепичной записью -- купи другой, а свой подари соседу по гаражу.
Anquihald
FedorAndreevich
swap вроде есть, следить приходится вручную
Так "вроде" или есть?

cat /proc/swaps
Если со свопом всё в порядке, сделай его использование менее агрессивным, потому что по умолчанию своп используется по серверному сценарию. Для этого в /etc/sysctl.conf добавь:
vm.swappiness=10
(По умолчанию этот параметр равен 60.)
Дальше обнови параметры: sysctl -p
Дальше, если у тебя hdd – проследи, чтобы планировщик ввода-вывода был подходящий, например bfq. По умолчанию выставляется mq-deadline, что является оптимальным для ssd, но не hdd.
Ну и сам hdd должен быть не дешман на стопицод терабайт с черепичной записью, а нормальный. Проверь производителя и модель, спросив у Гугла. Если он с черепичной записью – купи другой, а свой подари соседу по гаражу.
Частично помогло, стало более сложно "убить" систему
И все-таки:
- ищи причину: или сам без контрольно нагружаешь систему или какое-то приложение или что-то с системой/железом
- в случае зависания, причной которого является переполнение ОЗУ, не нужно выполнять reboot, нужно просто убить приложения, жрущие много памяти - или в ручную, если это возможно (например, используя top) или запустить oom killer (при сильном зависании), который сам найдет и убьет жрущие приложение.

PS - запуск oom killer - Alt+SysRq+f ... примерное время востановления 1 - 5 минут, зависит от тяжести зависания ...
Ошибки не исчезают с опытом - они просто умнеют
В части /etc/sysctl.conf ...
В ArchLinux файл настроек sysctl рекомендуют создават в /etc/sysctl.d/99-sysctl.conf

Для более стабильной работы системы в ситуациях нехватки памяти рекомендую установить
vm.overcommit_memory=2
vm.overcommit_ratio=100
vm.oom_kill_allocating_task=1
Два первых параметра (overcommit) - устанавливают строгую политику выделения памяти - если процесс просит памяти, а её нет, то ядро отказывает процессу в ее выделении (vm.overcommit_ratio - подбирают экспериментируя в диапазане 70 - 100)
Третий парамет (oom_kill_allocating_task) - oom killer убивает задачу, которая вызвала состояние нехватки памяти.

Для применения волшебных клавиш (SysRq) рекомендую установить kernel.sysrq=1

PS - забыл еще про параметр kernel.panic=10 - если поймал kernel panic, то система через 10с выполнит reboot, а не будет висет колом.
Ошибки не исчезают с опытом - они просто умнеют
1. AutoTabDiscard - для других браузеров есть тоже с аналогичным функционалом
2. swap in zram
3. UKSM в ядре. Экономит около 500 мб RAM при средней нагрузке. Арч репа
PuppyRusArch (PRA)
Провел эксперимент ...
Имею старый ноут (12 лет), 6G ОЗУ, swap - нет, запущен earlyoom.service и установлены следующие значения в 99-sysctl.conf (лишнее убрал)
kernel.sysrq=1
kernel.panic=10
vm.overcommit_memory=2
vm.overcommit_ratio=100
vm.oom_kill_allocating_task=1
Запустил следующие процессы: tilix, libreoffice, pcmamfm, firefox (15 вкадок), palemonn (15 вкладок)
Проблем с зависанием нет, памяти хватает
free -m
               total        used        free      shared  buff/cache   available
Mem:     5863        2182        2251         181        1429        3270
Swap:          0           0           0
oom killer ни разу не сработал, но в логах имеется около 20 строк, типа
arch kernel: __vm_enough_memory: pid: 5396, comm: Isolated Web Co, not enough memory for the allocation
arch kernel: __vm_enough_memory: pid: 5396, comm: Isolated Web Co, not enough memory for the allocation
…………………...
arch kernel: __vm_enough_memory: pid: 3464, comm: IPC Launch, not enough memory for the allocation
arch kernel: __vm_enough_memory: pid: 3464, comm: IPC Launch, not enough memory for the allocation
указывающих на то, что был запрет на выделение памяти некоторым процессам, что в работе я даже и не заметил.
Ошибки не исчезают с опытом - они просто умнеют
vasek
Проблем с зависанием нет
И откуда им взяться, если треть памяти свободна?
anode
И откуда им взяться, если треть памяти свободна?
Это не имеет значения (просто хотел показать, что открыто 30 вкладок) ... усложняю - запускаю дополнительно два тяжелых приложения
free -m
               total        used        free      shared  buff/cache   available
Mem:     5863        3929         688          81        1245        1584
Swap:          0           0           0
... ничего не виснет .... запускаю к запущенному firefox еще и palemoon .... зависаний нет, но на palemoon уже память не выделяют и он не запускается ... видим в логах
arch kernel: __vm_enough_memory: pid: 5402, comm: palemoon, not enough memory for the allocation
... но oom killer не сработал, убивать ничего не стал.
Мне важно одно - чтобы не было тормозов.

PS - забыл отметить, в принципе с такими параметрами при нормальной работе earlyoom.service и не нужен (если памяти не достачно, то новые приложение не запускаются, так как память им не выделяется), но удалять его не стал, оставил на всякий случай, всякое бывает.
Ошибки не исчезают с опытом - они просто умнеют
vasek
В части /etc/sysctl.conf
В ArchLinux файл настроек sysctl рекомендуют создават в /etc/sysctl.d/99-sysctl.conf
ln -s /etc/sysctl.conf /etc/sysctl.d/99-sysctl.conf
;-)
Anquihald
ln -s /etc/sysctl.conf /etc/sysctl.d/99-sysctl.conf
Wiki:
Примечание: Начиная с версии 207 и 21x, systemd применяет только настройки из /etc/sysctl.d/*.conf и /usr/lib/sysctl.d/*.conf. Если у вас был файл /etc/sysctl.conf, нужно переименовать его в /etc/sysctl.d/99-sysctl.conf.
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.