URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5755
[ Назад ]

Исходное сообщение
"Проблеммы со swap-файлом(не используется)(FreeBSD 5.4)"

Отправлено Максим Кудимов , 28-Сен-06 10:50 
Суть проблеммы наверно более широкая,чем просто программирование.
Имеем относительно хороший компьютер - оперативная память 1Gb, ОС - FreeBSD 5.4, для swap выделен раздел размером 2Gb.
Пишу программу на C++. пока программа помещается в оперативной памяти - все нормально,
но как только она пытается выделить себе еще памяти, за пределами оперативной, - вылетает с исключением Core Dump.
Таким образом получается, что программа не может частично находится в оперативной памяти, а частично в swap?
Можно ли решить данную проблемму?
Причем проблемма касается не только нашей программы. Если, допустим, mysql также выделит память, то он тоже вылетает с исключением Core Dump.

Содержание

Сообщения в этом обсуждении
"Проблеммы со swap-файлом(не используется)(FreeBSD 5.4)"
Отправлено levsha , 28-Сен-06 11:14 
Выполните команду limits , обратите внимание на значение datasize

"Проблеммы со swap-файлом(не используется)(FreeBSD 5.4)"
Отправлено Максим Кудимов , 28-Сен-06 12:07 
>Выполните команду limits , обратите внимание на значение datasize


Resource limits (current):
  cputime          infinity secs
  filesize         infinity kb
  datasize           524288 kb
  stacksize           65536 kb
  coredumpsize     infinity kb
  memoryuse        infinity kb
  memorylocked     infinity kb
  maxprocesses         5547
  openfiles           11095
  sbsize           infinity bytes
  vmemoryuse       infinity kb

мне кажется что это не зависит от размера памяти. Программа рушится до 500 МБ. как только программе нужно больше памяти чем есть в оперативке - вылетает (например php).


может поможет показания top:

last pid: 12027;  load averages:  0.06,  0.02,  0.00        up 3+00:04:02  12:05:02
51 processes:  1 running, 50 sleeping
CPU states:  4.3% user,  0.0% nice,  2.3% system,  0.0% interrupt, 93.4% idle
Mem: 528M Active, 159M Inact, 155M Wired, 47M Cache, 110M Buf, 92M Free
Swap: 2048M Total, 304K Used, 2048M Free


"Проблеммы со swap-файлом(не используется)(FreeBSD 5.4)"
Отправлено DeadLoco , 28-Сен-06 14:53 
>>Выполните команду limits , обратите внимание на значение datasize

>  datasize          524288 kb

>мне кажется что это не зависит от размера памяти. Программа рушится до 500 МБ.


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

options             MAXDSIZ="(2048*1024*1024)"
options             MAXSSIZ="(2048*1024*1024)"
options             DFLDSIZ="(2048*1024*1024)"


MAXDSIZ - как раз и есть максимальный размер сегмента данных, в данном случае - 2Гб.


"Проблеммы со swap-файлом(не используется)(FreeBSD 5.4)"
Отправлено Максим Кудимов , 28-Сен-06 15:15 
Спасибо большое!
в самом деле core damp вылетает при попытке выделить больше 500 МБ. я думал, что проверяли такой вариант.

"Проблеммы со swap-файлом(не используется)(FreeBSD 5.4)"
Отправлено VAK , 28-Сен-06 21:50 
>>>Выполните команду limits , обратите внимание на значение datasize
>
>>  datasize          524288 kb
>
>>мне кажется что это не зависит от размера памяти. Программа рушится до 500 МБ.
>
>
>Вот это и есть ограничение на размер памяти, отводимой под данные процесса.
>Побороть можно путем перекомпиляции ядры со следующими строками в конфиге:
>
>options            
> MAXDSIZ="(2048*1024*1024)"
>options            
> MAXSSIZ="(2048*1024*1024)"
>options            
> DFLDSIZ="(2048*1024*1024)"
>
>
>MAXDSIZ - как раз и есть максимальный размер сегмента данных, в данном
>случае - 2Гб.

это можно сделать и без перекомпиляции ядра

нужно в loader.conf
добавть, например,

kern.maxdsiz="1000M"

в версиях 5.4 и новее - должно работать