Ядро Linux не может мягко обрабатывать ситуации с нехваткой памяти. Как побороть?

indeviral
Ну и bash как бы глупо выглядит на мой взгляд, потому что в 90% у меня кончается озу из за всяких "интерпретаторов")
если говорится о командных интерпретаторах, то это не может соответствовать действительности!
с округлением в большую сторону например ZSH хвает 4М, а тот же SH 1М, ВОПРОС (риторический) сколько у тебя ОЗУ?
намек на то что процессов "интерпретаторов" у тебя не может быть больше 100 (ИМХО по максимуму)
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
о командных интерпретаторах
Да я вообще-то к тому что обычно написанные криворуким мной скрипты и приводят к окончанию ограниченного запаса озу(да и неограниченный бы закончился))
И ставить запрет на прибитие его киллером ну такое себе.
Ошибки в тексте-неповторимый стиль автора©
Волнует, полагаю, многих, особенно гуглохромовских пользователей с современными творениями сайтописателей (даже гит, даже гит теперь не всегда и не везде работает). Другое дело, что тревожащиеся уже пробовали еарлирум и др. и явного преимущества (как я) не увидели. Мозги же кончаются внезапно, как только вдруг надо что-то сделать новое - по мере расширения круга интересов (делаю стул и внезапно хочу посчитать запас прочности ножек - это-ж трехмерная сетка, а там... понеслось). И вновь окунаешься в тему и приходится по старинке наблюдая за разбуханием памяти успевать прибивать вручную ненужное - браузеры, птицу (ну куда ей столько сотен метров!!!) и пр. Я в принципе не доверяю построенным не мною автоматам - поди познай их логику. Но это чистой воды дедовский подход с дедовскими же методами.
wau
тревожащиеся уже пробовали еарлирум и др. и явного преимущества (как я) не увидели.
Мы с vasek делились опытом успешного использования earlyoom.
wau
И вновь окунаешься в тему и приходится по старинке наблюдая за разбуханием памяти успевать прибивать вручную ненужное
Во всем должна быть мера и соответствующий подход - у всего есть свой предел и нет смыла его переступать.
Не ведут же суперсложные расчеты чего либо на слабом ноутбуке.
Ошибки не исчезают с опытом - они просто умнеют
Сейчас провел эксперимент - остановил earlyoom и открыл 6 мощных карт - все зависло, даже мышка … и не имея никаких приблуд спокойно вышел из этой ситуации простым нажатием комбинации 3-х кнопок, вызвав ядерный oom-killer и плюс к этому снял нужную мне информацию (о процессах и памяти). На устаканивание системы ушло около 2 мин. Что видно из полученной информации?
1. Жрущие процессы - 6 карт, открытых с использованием приложения mirage
 [  pid  ]     uid    tgid    total_vm    rss   pgtables_bytes swapents oom_score_adj    name
[  44270]  1000 44270   260791   177594  1581056           0             0                      mirage
[  44290]  1000 44290   260537   177585  1568768           0             0                      mirage
[  44331]  1000 44331   404081   321094  2715648           0             0                      mirage
[  44351]  1000 44351   258880   175858  1556480           0             0                      mirage
[  44372]  1000 44372   366342   301705  2551808           0             0                      mirage
[  44392]  1000 44392   220758   174608  1540096           0             0                      mirage
2. Работа OOM-Killer
Out of memory: Killed process 44331 (mirage) total-vm:1616324kB, anon-rss:1283824kB, file-rss:0kB, shmem-rss:552kB, UID:1000 pgtables:2652kB oom_score_adj:0
3. Информация о памяти (привожу частично)
- свободно ОЗУ = 1,15G, точнее
Node 0 DMA:      = 14320kB
Node 0 DMA32:  = 1151348kB
Node 0 Normal:    = 43260kB
- полный объем ОЗУ = 5,94G
1556062 pages RAM

И выходит, что можно обойтись и без всяких приблуд, но с ними спокойнее ...
Ошибки не исчезают с опытом - они просто умнеют
В новом systemd есть systemd-oomd и oomctl. Пока не понятно, как оно в сравнении с тем же earlyroom будет работать. Такие дела)
Mirk
В новом systemd есть systemd-oomd
Только ожидается в systemd-247. Systemd-oomd - из той же оперы, но сложнее - демон нехватки памяти, который будет опрашивать systemd на наличие контрольных групп с поддержкой OOMD, чтобы отслеживать их и уничтожать, как ему прописано.
Обсуждали еще летом - отношение как всегда не однозначное ... мне даже понравились некоторые шутки
 system-doomd? .... systemd-oom-nom-nom
или еще лучше
For that, you'll need to run:
systemctl start systemd-oomd-please.don't.kill.me.d
Ну а кроме шуток, большая часть спецов вообще против всех этих демонов-киллеров
systemd deciding which of my apps to kill and when to kill them sounds like a disaster waiting to happen. I can monitor my own system memory just fine, thank you very much. There's conky and applets and htop and glances and system monitors and notifiers all over the place I can use.
С однойт стороны в чем то я с ними и согласен, о чем и писал выше .... с другой, все это индивидуально и каждый решает сам, что и как ему использовать.
Ошибки не исчезают с опытом - они просто умнеют
vasek
все зависло, даже мышка
vasek
можно обойтись и без всяких приблуд, но с ними спокойнее .

И удобнее - поскольку не то что зависаний, -- не сразу заметишь что жрущий процесс прибит. А всё нужное для работы (прописанное в исключениях демонов) по-прежнему работает.

vasek
каждый решает сам
И это замечательное свойство линукса вообще и арчлинукса в частности (и в особеноости ).
Чтобы топик был более полным/информативным отмечу два момента
1. В части использования swap - мнения противоположны - есть сторонники и есть противники. Но с ним все не так просто, зависит от многих факторов … рекомендую для ознакомления хорошую статью, где многое разложено по полочкам, но не нужно и это принимать в качестве догмы, все индивидуально и многое зависит от решаемых задач и конкретного железа. Лучше опираться на результаты производительности своей системы и железа при выполнении как стандартного вида работ, так и не стандартного: с большой нагрузкой cpu, io, memory и как часто это случается, а, главное, что от этого ожидаете, точнее, что хотите в итоге иметь.
2. А для наглядности приведу мониторинг своей системы со слабеньким железом. Как правило, режим работы стандартный и не выходит за рамки сверхнагрузок - то есть проблем в части нагрузок cpu, io, memory не имею. Не стандартные ситуации бывают не часто, жрущих однотипных приложений не жалко - важна отзывчивость и никаких зависаний.

Мониторинг производительности выполнял с использованием встроенного в ядро модуля psi (Pressure Stall Information) в двух режимах настройки:
- общепринятый режим: swap активирован
- индивидуальный режим: swap деактивирован, активирован earlyoom
Для начала мониторинг нормального режима работы (терминал, браузер, libreoffice)
CPU
some avg10=0.00 avg60=0.08 avg300=0.03 total=29799742
IO
some avg10=11.04 avg60=12.98 avg300=7.17 total=370253629
full avg10=10.58 avg60=12.68 avg300=6.97 total=346673155
MEMORY
some avg10=0.00 avg60=0.00 avg300=0.00 total=26525432
full avg10=0.00 avg60=0.00 avg300=0.00 total=25803466
расшифровку значений смотрите в DOC - и как видно все нормально, были незначительные затыки с IO, но это все мелочи … а вот проблем с memory не испытывал, все по нулям.
В принципе IO можно и не смотреть вообще - он погоды не делает, но привожу для интереса

С нагрузкой - swap активирован, earlyoom деактивирован
CPU
some avg10=2.62 avg60=2.44 avg300=0.72 total=33808068
IO
some avg10=52.46 avg60=32.50 avg300=15.39 total=423651183
full avg10=44.98 avg60=27.37 avg300=13.57 total=393658665
MEMORY
some avg10=40.95 avg60=26.68 avg300=7.75 total=51730921
full avg10=31.66 avg60=20.55 avg300=6.08 total=45813511
Видно, что с CPU проблем нет, IO - с этим все понятно, идет запись на диск, но, гланое, память - уже проблемы, хотя больших зависаний нет (дальше нагружать не стал), но подтормаживание ощутимо, что заметно и по цифрам.

С нагрузкой - swap деактивирован, earlyoom активирован
CPU
some avg10=4.82 avg60=4.32 avg300=1.40 total=7430658
IO
some avg10=13.06 avg60=10.79 avg300=10.19 total=107176193
full avg10=10.77 avg60=8.53 avg300=9.21 total=101657904
MEMORY
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
А вот здесь нагружал даже сильнее, но память по нулям, IO тоже нормально - на диск ничего не пишется, earlyoom отработал нормально - зависаний системы вообще не заметил.

И для полноты картины привожу данные по составу swap, полученного для случая "С нагрузкой - swap активирован, earlyoom деактивирован"
Список приложений, отправленных в swap - объем занятого swap - 2194800 Кб
Overall swap used: 2194800
ID=22832 - Swap used: 1392160 - (mirage )
PID=22852 - Swap used: 404120 - (mirage )
PID=791 - Swap used: 236944 - (palemoon )
PID=434 - Swap used: 57116 - (Xorg )
PID=22874 - Swap used: 43736 - (mirage )
PID=448 - Swap used: 20296 - (tilix )
PID=25373 - Swap used: 10820 - (mirage )
PID=449 - Swap used: 6912 - (pcmanfm )
PID=441 - Swap used: 5184 - (spectrwm )
PID=391 - Swap used: 3048 - (systemd )
PID=495 - Swap used: 2000 - (gvfsd-fuse )
PID=490 - Swap used: 1928 - (gvfsd )
PID=470 - Swap used: 1824 - (dzen2 )
PID=403 - Swap used: 1576 - (bash )
PID=511 - Swap used: 1488 - (gvfsd-metadata )
PID=415 - Swap used: 1104 - (startx )
PID=541 - Swap used: 1088 - (bash )
PID=412 - Swap used: 1088 - (wm )
PID=444 - Swap used: 672 - (dbus-daemon )
PID=468 - Swap used: 652 - (baraction_dzen. )
PID=469 - Swap used: 404 - (baraction_dzen. )
PID=433 - Swap used: 376 - (xinit )
PID=25499 - Swap used: 256 - (mirage )
PID=516 - Swap used: 8 - (at-spi-bus-laun )
Интересно то, что в swap ушла часть практически всех процессов.

Содержание swap по истечение около 10 мин - объем swap упал до 326864Кб (мощные приложения закрыл), но вот системные/пользовательские приложения (часть памяти) так и висят в swap
Overall swap used: 326864
PID=791 - Swap used: 196632 - (palemoon )
PID=434 - Swap used: 68472 - (Xorg )
PID=448 - Swap used: 15356 - (tilix )
PID=1038 - Swap used: 7472 - (pulseaudio )
PID=441 - Swap used: 4576 - (spectrwm )
PID=391 - Swap used: 3720 - (systemd )
PID=636 - Swap used: 2872 - (gvfsd-computer )
PID=545 - Swap used: 2580 - (gvfs-udisks2-vo )
PID=1044 - Swap used: 2188 - (gsettings-helpe )
PID=495 - Swap used: 2056 - (gvfsd-fuse )
PID=470 - Swap used: 1824 - (dzen2 )
PID=516 - Swap used: 1796 - (at-spi-bus-laun )
PID=619 - Swap used: 1720 - (gvfs-afc-volume )
PID=403 - Swap used: 1576 - (bash )
PID=628 - Swap used: 1560 - (gvfsd-trash )
PID=511 - Swap used: 1560 - (gvfsd-metadata )
PID=615 - Swap used: 1424 - (gvfs-gphoto2-vo )
PID=573 - Swap used: 1416 - (at-spi2-registr )
PID=490 - Swap used: 1240 - (gvfsd )
PID=415 - Swap used: 1104 - (startx )
PID=412 - Swap used: 1088 - (wm )
PID=541 - Swap used: 1016 - (bash )
PID=624 - Swap used: 928 - (gvfs-mtp-volume )
PID=468 - Swap used: 652 - (baraction_dzen. )
PID=15833 - Swap used: 432 - (dconf-service )
PID=444 - Swap used: 424 - (dbus-daemon )
PID=522 - Swap used: 408 - (dbus-daemon )
PID=469 - Swap used: 404 - (baraction_dzen. )
PID=433 - Swap used: 368 - (xinit )

PS 1 - Для мониторинга использовал команду:
watch "(echo CPU; cat /proc/pressure/cpu ; echo IO; cat /proc/pressure/io; echo MEMORY; cat /proc/pressure/memory)"
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.