Прожорливый Arch

поддержу alexdsp,
Чисто ради интереса зпустил 2 лайф дистра PuppyRus и Knoppix.
Так там те же проги на много меньше памяти хавают...
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Да нет, верно они работают. Только интерпретировать их показания надо с учетом (как бы загнуть?) философии управления виртуальной памятью в линуксе.
То есть, программа справедливо считает, что для оптимальной работы все ее объекты и данные желательно расположить в непрерывной области оперативной памяти. На основе каких-то своих соображений она запрашивает (с запасом на будущее) у операционной системы некоторое количество памяти. Ядро линукса, в свою очередь самонадеянно говорит: "ок, выделил, как просили",- надеясь на то, что когда придет время - сумеет разобраться с вопросом. (Напоминает наших отечественных недопровайдеров, предлагающих задешево безлимитный трафик на огромной скорости всем подряд). Но реально память не выделена. Она будет выделена только если программа действительно попытается записать туда данные или считать. Это, конечно, грубое приближение. На самом деле там все сложнее и существует далеко не единственный алгоритм управления памятью.
И вот пришли к ситуации, когда с точки зрения процесса(программы) он занимает значительный объем оперативки. Это видение процесса отображается напротив имени и id процесса в top(htop). А ядру пофигу, что думает отдельный процесс. Оно сообщает зелененьким цветом, сколько на данный момент выделено на самом деле. Это гораздо меньше, чем если складывать цифры для каждого процесса.
Пример: htop показывает (прямо у меня сейчас)
firefox - 1167M
loffice - 948M
X - 207M
pidgin- 642M
terminator - 514M
gnubiff - 757M
Думаю, хватит, т.к. уже набрался объем больше, чем в два раза превышающий мои 2 Гига. (в сумме 4235М). Там еще на гиг-полтора наберется по мелочи. При этом, как free, так и htop говорят, что реально используется только ~568M памяти. Это всего четверть моей памяти.
И каждый, по-своему, прав.
PS: на самом деле, в htop надо еще смотреть на колонки M_RESIDENT и M_SHARE. Это дает более реалистичную оценку используемой процессами памяти.
nafanja
поддержу alexdsp,
Чисто ради интереса зпустил 2 лайф дистра PuppyRus и Knoppix.
Так там те же проги на много меньше памяти хавают...
Думаю, можно сравнить содержимое файлов /proc/sys/vm/* арчлинукса и сравниваемых дистрибутивов. Возможно, там что-то в этом направлении подкручено.
Не без основания предполагаю, что если в файл /proc/sys/vm/overcommit_memory прописать 2, то расход памяти для процессов сильно уменьшится.
Я просто оставлю это здесь:

http://www.welinux.ru/post/2388/
gentoo
honaht
Я просто оставлю это здесь:

http://www.welinux.ru/post/2388/
Спасибо. Очень ценная статья. Действительо, оказывается, что оно просто "так отображается". Вместе со всеми библиотеками...
Осталось разобраться, почему в разных дистрибутивах существенно разные числа, хотя ответ наполовину уже получен.
honaht
Я просто оставлю это здесь:

http://www.welinux.ru/post/2388/
O! То, что надо! (А я в очередной раз убедился, что краткость - не моя сестра ;-))
kurych
Не без основания предполагаю, что если в файл /proc/sys/vm/overcommit_memory прописать 2, то расход памяти для процессов сильно уменьшится.
Просто добавлю для экспериментаторов:
Делаем
# sysctl vm.overcommit_memory=2
и получаем:
...
-bash: fork: Cannot allocate memory
равно как и прочие радости невозможности запуска граф. приложений.
По-крайней мере, это справедливо для RAM 2Gb и swap 2Gb, только что проверил.

Поэтому:
# sysctl vm.overcommit_memory=2
# sysctl vm.overcommit_ratio=100
и получаем то, к чему стремились.

bobart
# sysctl vm.overcommit_memory=2
# sysctl vm.overcommit_ratio=100
и получаем то, к чему стремились.
Немного недопонял вывод, к чему стремились?
Что касается эксперимента, то я вчера, пока дискутировал на эту тему, выставил у себя vm.overcommit_memory=2 с дефолтным vm.overcommit_ratio=50. Графическую среду, естественно, перезапустил, что бы оно с новыми параметрами память отжирало. Уже почти сутки - никаких проблем.
RAM - 2GБ, swap - 2G, но пока даже не используется
Немного недопонял вывод, к чему стремились?
Я тоже не вполне понял, но вроде стремились к сокращению выделения памяти для *процессов. Просто я провёл эксперимент по первому "образцу" и получил "Cannot allocate memory" в баше и граф. окно аналогичного содержания (что-то о невозможности выделения памяти для процесса) при попытке запустить Opera и ещё что-то из графики. Поэтому и привёл, так сказать, более корректный метод насилия над менедж. памяти или как его там.

При выполнении без ребута
# echo 2 > /proc/sys/vm/overcommit_memory
я получал краш плазмы, затем иксов и в довершение, после перезапуска kdm, какое-то стрёмное окно с упоминанием невозможности то ли запуска, то ли инициализации xkmserver - то есть, логи я не копал и пишу по памяти.
При этом, насколько я понял, 50 - это дефолт для vm.overcommit_ratio, справедливый при vm.overcommit_memory=0 (то есть, всё по дефолту).
И что-же выходит, если это так, то при одинаковых параметрах мы с тобой получаем разный результат?

Кстати, а каким образом ты присваивал "2-ку" - через # echo 2 > ... или через # sysctl параметр=значение ?
vm.overcommit_ratio=50 - величина по умолчанию. Этот параметр используется только при overcommit_memory=2 (подробности в "man 5 proc").
Я выставлял через "echo 2 >..."
Памяти действительно выделяется поменьше.
Разные результаты, наверно, потому, что я KDE не использую, а сижу на менее прожорливом Openbox. Думаю, что в случае KDE/Gnome более правильным экспериментом было бы выставить этот параметр при загрузке через /etc/sysctl.conf или /etc/sysctl.d/. Но в любом случае до поднятия графики.
Тем не менее, считаю, что этот эксперимент только для того, что бы увидеть, что и арчлинукс может вести себя как все. А в повседневной жизни не вижу смысла ужимать аппетиты программ до тех пор, пока памяти достаточно и не наблюдается конфликтов. Формулу обратной зависимости оптимизации производительности от объема используемой памяти еще никто пока не отменил.
 
Зарегистрироваться или войдите чтобы оставить сообщение.