FreeBook
FreeBSD
OtherBSD
SB Linux
OtherOS
FreeProgs
FreeNotes
FreeGeo
SiteMap

FreeBSD. Mini-HOWTO
[Top]
[Content]

Об использовании swap-файла

Василий Серман

Нередко я использую морально устаревшие компьютеры на базе первых пентиумов для организации гейта между ЛВС и Интернет в небольших офисах (со стандартными функциями UNIX-сервера: прокси, почта, файрвол). Типичная конфигурация таких машин P-166MMX/32Mb и все остальное в том же духе. Одна из типичных ситуаций в собственной практике.

При инсталляции системы размер свопа был выбран в соответствии с рекомендациями - удвоенным от оперативной памяти, - я, не мелочась, откусил от диска все 100мб :). Спустя некоторое время функции сервера были расширены: добавлена проверка почтового трафика антивирусом. Вскоре вылезла неприятная деталь: имеющихся в системе суммарных 132 мегабайт памяти не хватало для проверки некоторых писем. Файлы с 10-20 сканированными сертификатами, упакованными в архив, при проверке антивирусом распаковывались, и, исчерпав всю доступную память, "отстреливали" сканер. С некоторой долей вероятности забирая с собой и еще какой-нибудь сервис, коему "повезло" в этот момент попросить памяти. :(

Выходом из этой ситуации послужила организация дополнительного файла подкачки.

Опишу необходимую последовательность действий для FreeBSD 4.x:

  • Собрать ядро с опцией: pseudo-device vn 1
  • Создать новое устройство vn (подозреваю, что в 5.х оно должно будет создано системой автоматически):
    $ sh ./MAKEDEV vn0
    
  • Создать своп-файл:
    $ dd if=/dev/zero of=/usr/swap bs=1024k count=256
    
  • Выставить правильные права доступа:
    $ chmod 0600 /usr/swap
    
  • Прописать своп в rc.conf:
    $ swapfile="/usr/swap"
    

    Понятно, что все эти действия производятся от лица root'а. После чего - либо перезагрузиться, либо подключить своп "на лету" командой

    $ vnconfig -ce /dev/vn0c /usr/swap swap
    

    У одного из моих коллег рушилась программа - анализатор лога Socks-прокси, исходный код которой был утерян. Временным решением ля него также стал дополнительный своп-файл.

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

    /kernel: swap_pager: out of swap space
    

    От редактора: в этой заметке речь идет, разумеется, о сервере. Однако и на десктопе от такого зарекаться не след. Так что примем, товарищи, к сведению... - А.Ф.


    [Content]
    [Top]