воскресенье, 31 января 2010 г.

Как очистить swap в linux

Думаю, вы иногда сталкиваетесь со следующей ситуацией: запускаешь ресурсоёмкое приложение, оно отжирает кучу оперативной памяти, ОС выгружает часть малоиспользуемых библиотек в раздел подкачки. Всё бы ничего, да только после закрытия приложения и высвобождения памяти эти библиотеки так и остаются лежать на жёстком диске. Отсюда неприятные подтормаживания и прочие прелести, так знакомые пользователям windows (надо сказать, windows при использовании виртуальной памяти тормозила у меня не так сильно - то ли это убунта так себя ведёт, то ли драйвер на контроллер диска кривоват). Однако есть довольно простое решение данной проблемы.

Командой swapoff -a, запущенной от имени суперпользователя, можно отключить использование всех разделов и файлов подкачки. После ввода команды содержимое свопа за несколько минут загружается обратно в оперативную память, а сам раздел подкачки отключается. Если честно, я не испытывал, что произойдёт, если при этом оперативной памяти окажется недостаточно. Ну и после загрузки содержимого свопа в оперативную память я всегда включал его обратно командой swapon -a. Однако приятно, что можно так легко и быстро вернуть отзывчивость системы одной командой безо всяких перезагрузок.

5 комментариев:

  1. Спасибо, вполне помогло. не то что бы это представляло проблему, но немного нервировало nagios. Оперативки к тому времени свободной был целый вагон, а swap забит под "завязку"

    ОтветитьУдалить
    Ответы
    1. некроответ - в /proc/sys/vm/ есть файл swappiness - понизь его на десяток-другой. 60 - оптимальное значение.

      Удалить
  2. Я попробовал отключить когда мало оперативки, пишет "Невозможно выделить память"

    ОтветитьУдалить
  3. Спасибо, очень полезная статья. На одном из серверов при свободных 3Гб RAM зачем-то использовалось полгига swap-а. Сделал, как описано в статье - всё перенеслось в RAM. Отлично.

    ОтветитьУдалить
  4. Не помогло, автор пишет о перекладывании файлов из свопа в физическую оперативу. У меня же часто бывает так, что даже после завершения всех программ в свопе занята почти половина, как его очистить в том случае?

    ОтветитьУдалить