Принудительная очистка системных кэшей - drop_caches


bliznezz аватар

bliznezz - Posted on 10 Май 2009

Начиная с Linux ядра 2.6.16 появилась возможность принудительной очистки системных кэшей:

Чистим pagecache:

# echo 1 > /proc/sys/vm/drop_caches

Чистим dentrie и inode кэши:

# echo 2 > /proc/sys/vm/drop_caches

Чистим pagecache, dentrie и inode кэши:

# echo 3 > /proc/sys/vm/drop_caches

После выполнения операции необходимо запустить команду sync

http://linux-mm.org/Drop_Caches
http://www.opennet.ru/tips/info/1455.shtml

для более ранних версий ядра смотрите этот типс.

UPD:
Нехватает ресурсов, кто будет убит?

4
Ваша оценка: Ничего Рейтинг: 4 (1 vote)

Странное дело, в моей 14-ой федоре почти ничего из упомянутых в статье педалей нет (есть только drop_caches):

# uname -r ; ls /proc/sys/vm | egrep "buffermem|freepages|kswapd|pagecache" | wc -l
2.6.35.11-83.fc14.x86_64
0

Это для какого ядра писалось?

/proc/sys/vm - виртуальная память

/proc/sys/vm/buffermem

Здесь происходит управление количеством общей системной памяти (в процентах), которая будет использована как буферная память. Файл содержит три значения, которые могут быть указаны в виде списка через пробел:

1. Минимальный процент памяти, которая будет использована для буфера
2. Система будет пытаться установить это количество памяти для буфера если количество доступной памяти будет уменьшено
3. Максимальный процент памяти, которая будет использована для буферов

Default setting: 2 10 60

/proc/sys/vm/freepages

Этот файл управляет как система реагирует на различные уровни свободной памяти. Содержит три значения, которые могут быть установлены в виде списка, разделенного пробелами:

1. Если количество свободных страниц в системе достигнет этого минимального предела, только ядро будет иметь доступ к любому дополнительному количеству памяти.
2. Если количество свободных страниц в системе упадет ниже этого предела, то ядро начнет более агрессивно свопировать для освобождения памяти и поддержания системной производительности.
3. Ядро будет пытаться сохранить это количество системной памяти свободным. Падение ниже этого значения приведет к свопированию.

Default setting: 512 768 1024

/proc/sys/vm/kswapd

Этот файл управляет как ядро будет свопировать память. Он содержит три значения в виде списка, разделенные пробелами:

1. Максимальное количество страниц, которое ядро пытается освободить за один раз. Если вы хотите увеличить величину свопирования, вам нужно увеличить это значение.
2. Минимальное количество раз, которое ядро пытается освободить страницу в время своппинга.
3. Количество страниц, которое ядро может записать в один своп. Оказывает сильное влияние на производительность системы. Чем больше это значение, тем больше данных будет свопировано и тем меньше времени будет потрачено на поиск на диске. Однако, слишком большое значение окажет обратных эффект на производительность системы из-за увеличения очереди запросов.

Default setting: 512 32 8

/proc/sys/vm/pagecache

Этот файл выполняет ту же работу, что и /proc/sys/vm/buffermem, но он делает ее для карты памяти и общего кэширования файлов.



Sysctl - это интерфейс, для определения или динамического изменения параметров в BSD Unix и Linux ядрах.для управления OS имеет команду

      /sbin/sysctl

Полезная утилита для внесения изменений в любые параметры ядра находится в директории /proc/sys. Она позволяет вам вносить изменения в работающее ядро (подобно echo и метод перенаправления, описанный выше), и имеет файл конфигурации, который выполняется при загрузке. Это позволяет чтобы внесенные изменения оставались в ядре после перезагрузки системы. Утилита называется sysctl и она полностью документирована в man sysctl(8).

Файл конфигурации для sysctl - /etc/sysctl.conf, который может быть редактирован, синтаксис файла описан в man sysctl.conf(8). Sysctl использует файлы в /proc/sys как индивидуальные переменные, которые могут быть изменены. Например, файл в /proc/sys, который представляет максимальное количество заголовков файлов в системе, /proc/sys/fs/file-max, представлен как fs.file-max.

Вы можете увидеть все переменные, доступные для изменения, используя команду sysctl -a. Переменные могут также быть изменены с помощью sysctl, которая выполняет ту же работу что и echo. Эта запись объясняет это:

    sysctl -w dir.file="value"
             или
    echo 'value' > /proc/sys/dir/file

Например: Используя пример с file-max, мы можем изменить это значение на 16384, используя один из двух методов:

    sysctl -w fs.file-max="16384"
 
    echo "16384" > /proc/sys/fs/file-max

Не забывайте, что sysctl не добавляет изменения в конфигурационный файл; вы должны сделать это вручную. Если вы хотите, чтобы ваши изменения остались в системе и после перезагрузки, вы должны настроить этот файл.
/etc/sysctl:

fs.file-max = 16384

Обратите внимание на расстановку пробело в команде и в конфигурационном файле.



Внимание: Не все дистрибутивы обеспечивают поддержку sysctl. Если это относится к вашей системе, то вы можете использовать echo и метод перенаправления, как описано выше и добавить эти команды в загрузочный скрипт, чтобы они выполнялись каждый раз при загрузке системы

Команду sync надо выполнить перед операцией, а не после (согласно Вами приведенной ссылке).

Как раз именно _после_, потому что если выполнить _до_ то сбросятся незаконченные операции записи, и судя по тому что написано на http://linux-mm.org/Drop_Caches её вообще можно не выполнять.

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.