OpenWay|POSIX-saga|FreeBSD etc.|All Linux|Apps|POSIX-live|SiteMap
FreeBSD и другие
(C) Указанные авторы, 2004, отныне и вовек
Links|Install|System|Use|Admin|DFBSD|BSD|Other

Об использовании 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
    

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


    Обсуждение проекта