LINUX.ORG.RU

куда девается своп?


0

0

вот такой вывод top
Mem:   1034000k total,   642856k used,   391144k free,    35708k buffers
Swap:  1052216k total,    33604k used,  1018612k free,   259492k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP DATA COMMAND
22373 vinick    25   0 2175m 289m 1324 R 99.9 28.7 144:22.86 1.8g 2.1g proga

может кто-нибудь объяснить - почему Mem(used)+swap(used) = 660mb, хотя 
как я понимаю должно быть не менее 2175mb.

Куде девается 1.8g свопа? в /dev/null? 
может быть ответ на этот вопрос поможет понять откуда вобще берется такой перерасход.
★★

Виртуальная память не обязана быть allocated, насколько помню. Иными словами, можно "заказать" терабайт, но "реально" использовать 1 мегабайт.

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

> Виртуальная память не обязана быть allocated, насколько помню. Иными словами, можно "заказать" терабайт, но "реально" использовать 1 мегабайт.

По идее да, она может выделяться только при обращении к ней.

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

хм... спасибо за разъяснения.

осталось теперь только выяснить какая сволочь делает такие "заказы памяти", если я кроме STL контейнеров ничего для динамического выделения памяти не использую.

У кого-нить есть идеи?

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

2Vinick:

> ...какая сволочь делает такие "заказы памяти", ...

Обрати внимание, она у тебя 2 гига отъела. Система 32-х битная?

Я думаю, просто компилятор порезвился, отъев все доступное адресное пространство (насколько я понимаю, в юзерспейсе больше 2 гигов не доступно), чтобы использовать свой менеджер памяти. Ничего страшного, все равно больше реальной памяти, чем есть, задача не получит:)

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

>насколько я понимаю, в юзерспейсе больше 2 гигов не доступно

нет. предел составляет гдето 2.7 Gb

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

система 32-битная, Приложение стартует с занятыми примерно 60 метрами(это нормально и правомерно), потом соскоростью 2-3 Мб/сек отъедает виртуальную память и при достижении примерно 2.7 гигов, как и сказал cvv, падает по exception bad_allock.

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

Vinick :

Тогда не понимаю вопроса.

Посмотри, где память течет. Очевидно, приложение в цикле выделяет память и ничего с ней не делает. Как только адресное пространство заканчивается, падает.

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

все, разобрался, в утечка была чужой библиотеке,в цикле выделялись блоки по 128 килобайт, использовалось из блока всего 10 кб и потом память не освобождалась.

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

Всем спасибо.

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

2Vinick :

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

Надеюсь. понятно, почему.

На вс. случай поясню: фактически память не выделялась, а только резервировалась. Выделялись только адреса, а реальных страниц для них не выделялось, соответственно, и свопиться было нечему. Как только адресное пространство закончилось, резервировать стало нечего...

Die-Hard ★★★★★
()
Ответ на: комментарий от cvv

2cvv :

>>насколько я понимаю, в юзерспейсе больше 2 гигов не доступно

>нет. предел составляет гдето 2.7 Gb

Кажется, ты с этим тут недавно разбирался? Или не ты, не помню...

Можешь пояснить расклад? Скока на юзерспейс (data, etc.), что ядро отъедает?

Меня интересует на 32бит классике _и_ на LP64 (кстати, а есть ли Линух на _других_ (кроме LP64) 64-битных моделях?).

(На вс. случай, кто не понимает, что такое LP64, http://www.unix.org/version2/whatsnew/lp64_wp.html)

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

> Ничего страшного, все равно больше реальной памяти, чем есть, задача не получит:)

обнадежил:-)

так вот почему у меня иксы по 100-150 метров свопа съедают, а памяти свободной остается постоянно больше 100 метров (как говорит top)

friday ★★★
()
Ответ на: комментарий от Die-Hard

на ia32 ядро отедает 1Гиг. Остальное компилер по своему усмотрению распределяет.

на тему LP64 ничего не знаю

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

2cvv:

> ...на ia32 ядро отедает 1Гиг.

1+2.7=3.7

А адресное пространство 2^32/1024/1024/1000 = 4.096 (ок, 2^32/1024/1024/1024 = 4)

Куда еще треть гига девается?

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

>2.7

Это только куча.

>Куда еще треть гига девается?

сегменты/секции стека, кода, данных.

цифры приблизительные. в каждом конкретном случае компилер может разрулить юзерспейсовские 3Gb как сам посчитает правильным

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