LINUX.ORG.RU
решено ФорумAdmin

Overcommit

 , ,


0

4

Привет ЛОР! Запутался как работает overcommit.

Я правильно понимаю, что когда overcommit 2 и ratio 100, выделить больше памяти чем RAM не получится(SWAP при этом выключен).

Наверно я что-то не так понял, ибо я думал это ограничение на виртуальную память, но это не так:

$ ps aux | awk '{sum+=$5} END {print sum / 1024}'
31924.3

$ grep CommitLimit /proc/meminfo 
CommitLimit:    25503660 kB

Ответ на: комментарий от Deleted

Нет.

$ cat /sys/kernel/mm/ksm/run
0

Если что, вывод grep с локалхоста(Но так везде где я смотрел, можешь для интереса у себя проверить). После запуска у меня 20 гибибайт, а после запуска хрома и открытия вкладок больше 30.

Woklex
() автор топика

В адресные пространства разных процессов могут быть смаплены одни и те же файлы, например, glibc. Ты их посчитал несколько раз, а надо один раз.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Т.е получается виртуальная память может пресекается?

В /proc/meminfo я вижу:

CommitLimit:    25503660 kB  - сколько максимум можно запросить памяти.
Committed_AS:    3564276 kB -  сколько памяти запрошено всеми процессам(Я так понимаю это сумма VIRT без пересечений)

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

Woklex
() автор топика
Ответ на: комментарий от Woklex

pmap показывает карту памяти процесса. Регионы без флага s, без имени файла, или с именем файла, но с флагом w — это то, что принадлежит конкретно этому процессу. Регионы с флагом s это шареная память, регионы с именем файла и без флага w это потенциально шареная память.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Спасибо! То что надо. Начал ковырять pmap. Сейчас сразу у меня не получилось, я думал что если я выведу всю память через pmap, а потом только уникальные строчки, то получится как-раз Committed_AS. Но это не так.

Woklex
() автор топика

pmap увлекательная штука. В итоге пока для меня ответ:

ps aux | awk '{print $2}' | xargs -n 1 pmap -q | awk '{$1=""; print $0}'  | sort -u | awk '{sum+=$1} END {print sum}'

Этим мы уберем многочисленные выделения память для одинаковых либ.

При таком подходе еще есть что-то лишние, т.к у меня Committed_AS 6 гигабайт, а односточник дает 8.

На выходных буду читать про память, нашел вот эти годные ссылки:

https://techtalk.intersec.com/2013/07/memory-part-1-memory-types/

https://opsmonkey.blogspot.ru/2007/01/linux-memory-overcommit.html

Буду рад, если кто-то еще что-нибудь годное посоветует.

Woklex
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.