- Как вы очищаете буферы и кеш в системе Linux?
- 1 ответ
- Опорожнение кеша буферов
- Увидеть, что находится в буферах и кеше
- fincore
- Обмен
- Очищаем буфер и кеш в системе Linux
- Очистка кеша и буфер в Linux
- Увидеть, что находится в буферах и кеше
- fincore
- Очистка swap в Linux
- Очистка memcached в Linux
- Настройка ядра Linux для повышения производительности памяти
- Контекст
- Объяснение
- unixforum.org
- Разбираемся в кэшах Linux систем и Swaping-е
- Разбираемся в кэшах Linux систем и Swaping-е
Как вы очищаете буферы и кеш в системе Linux?
Прежде чем выполнять некоторую работу по бенчмаркингу, как бы освободить память (ОЗУ), которую Ядро Linux потребляет для своих буферов и кешей?
Обратите внимание, что это в основном полезно для бенчмаркинга. Опорожнение буферов и кеш снижает производительность ! Если вы здесь, потому что считаете, что освобождение буферов и кеша было положительным, перейдите и прочитайте Linux, питающийся моей оперативной памятью! . Краткая история: свободная память — неиспользуемая память — это потраченная впустую память.
1 ответ
Опорожнение кеша буферов
Если вы когда-либо захотите его очистить, вы можете использовать эту цепочку команд.
Вы можете сигнализировать ядру Linux, чтобы удалить различные аспекты кешированных элементов, изменив числовой аргумент на указанную выше команду.
Чтобы освободить pagecache:
Чтобы освободить шпалы и иноды:
Чтобы освободить pagecache, dentries и inodes:
Вышеупомянутые должны выполняться как root. Если вы пытаетесь сделать это с помощью sudo , вам нужно немного изменить синтаксис примерно так:
ПРИМЕЧАНИЕ. . Если вы используете это:
более эзотерическая версия приведенной выше команды.
Почему изменение синтаксиса? Программа /bin/echo работает от имени root, из-за sudo , но оболочка, перенаправляющая вывод echo в файл root-only, все еще работает как вы. В вашей текущей оболочке начинается перенаправление до sudo .
Увидеть, что находится в буферах и кеше
Посмотрите linux-ftools , если вы хотите анализировать содержимое буферов & кэш. В частности, если вы хотите посмотреть, какие файлы в настоящее время кэшируются.
fincore
С помощью этого инструмента вы можете видеть, какие файлы кэшируются в директории give.
С вышесказанным вы можете видеть, что есть несколько файлов * .MYD, * .MYI и * .frm, которые в настоящее время кэшируются.
Обмен
Если вы хотите очистить свой своп, вы можете использовать следующие команды.
Затем используйте эту команду, чтобы отключить swap:
Источник
Очищаем буфер и кеш в системе Linux
Прежде чем приступить к практике, сперва поговорим о буферизации и кэш памяти в операционных системах Linux. Очистка кешей и буферов в Linux снижает производительность системы и в основном полезно только для бенчмаркинга.
Свободная память — неиспользуемая память — это потраченная память впустую.
Очистка кеша и буфер в Linux
Если вы хотите очистить в системе кеш и буфер, то вы можете использовать эту цепочку команд:
Вы можете сигнализировать ядру Linux, чтобы удалить различные аспекты кешированных элементов, изменив числовой аргумент на указанную выше команду.
- Чтобы освободить pagecache:
- Чтобы освободить иноды:
- Чтобы освободить pagecache, dentries и inodes:
ПРИМЕЧАНИЕ. Вышеупомянутые команды должны выполняться от root пользователя.
Если вы пытаетесь сделать это с помощью sudo , вам нужно немного изменить синтаксис, примерно так:
Либо в таком формате:
Увидеть, что находится в буферах и кеше
Посмотрите linux-ftools , если вы хотите анализировать содержимое буферов и кэша в вашей системе. В частности, если вы хотите посмотреть, какие файлы в настоящее время кэшируются.
fincore
С помощью этого инструмента вы можете видеть, какие файлы кэшируются в директории give.
Очистка swap в Linux
первым делом смотрим сколько занимает наш swap места:
В данном случае swap занимает 26 Мб из 8 Гб
Очистим swap следующей командой:
Затем используйте команду, чтобы посмотреть освободился ли swap:
Из вывода видно что swap теперь занимает 0 Мб.
Очистка memcached в Linux
Есть несколько путей очистить кеша memcached.
Первый — это очистка с помощью подключения через telnet. Используем следующие команды:
- localhost — хост где находится memcached (можно указывать и IP-адрес хоста).
- 11211 — порт который использует memcached.
Чтобы узнать порт и IP-адрес в терминале где установлен memcached наберите следующее:
Второй — перезапустить сервис memcached:
Третий — установить утилиту memcflush для очистки кешей:
Теперь очищаем кеш memcached
Если есть вопросы, то пишем в комментариях.
Также можете вступить в Телеграм канал, ВК или подписаться на Twitter. Ссылки в шапки страницы.
Заранее всем спасибо.
Источник
Настройка ядра Linux для повышения производительности памяти
Контекст
Linux старается оптимизировать использование памяти, занимая свободное место кэшем. Если память никак не используется, то это память, потраченная впустую.
Кэш заполняется данными по мере работы системы и когда приложениям требуется память, ядро ищет среди страниц кэша блок подходящего размера, освобождает его и выделяет приложению.
В некоторых случаях этот процесс может влиять на производительность, поскольку освобождение кэша занимает больше времени, чем просто доступ к неиспользуемой оперативной памяти. Поэтому иногда можно наблюдать снижение производительности.
Причина этого исключительно в том, что оперативная память используется на полную мощность, и других симптомов, кроме случайного эпизодического увеличения задержек, может и не быть. Такая же картина может наблюдаться, если жесткий диск не справляется с чтением и записью. Влияние может быть и на такие компоненты операционной системы как сетевая карта / iptables / ebtables / iproute2 — вместо реальной причины вы видите проблемы в сетевой задержке. В этой статье обсудим это подробнее и посмотрим, как минимизировать воздействие на систему.
Объяснение
В Linux есть несколько видов кэшей:
dirty cache — блоки данных, которые еще не записаны на диск (в файловых системах, поддерживающих кэширование, например, ext4). Этот кэш можно очистить командой sync. Очистка этого кэша может привести к снижению производительности. При обычном режиме работы не стоит этого делать, если только вам не нужно сбросить данные на жесткий диск, например, при аварии.
clean cache — блоки данных, которые для ускорения доступа находятся и на жестком диске и в памяти. Очистка clean cache может привести к снижению производительности, поскольку все данные будут считываться с диска.
inode cache — кэш информации о местоположении inode. Его можно очистить аналогично clean cache, но также с последующим снижением производительности.
slab cache — хранит объекты, выделенные приложениям с помощью malloc, таким образом, что в будущем они могут быть повторно выделены с уже заполненными данными объекта, что ускоряет выделение памяти.
С dirty cache мало что можно сделать, но другие типы кэшей можно очистить. Их очистка может привести к двум результатам. В приложениях, потребляющих много памяти, таких как Aerospike, задержки уменьшатся. Но с другой стороны, замедлится скорость ввода-вывода, так как все данные придется считывать с диска.
Очистка slab cache может привести к временному кратковременному снижению скорости. По этой причине очищать кэш не рекомендуется. Вместо этого, лучше сообщить системе, что определенный объем памяти всегда должен быть свободен и его нельзя занимать кэшем.
При необходимости очистку кэша можно выполнить следующим образом:
Большую часть памяти занимает page cache, поэтому если очищаете кэш, то рекомендуется очищать его (echo 1).
Для исправления проблемы можно установить минимальное количество свободной памяти. Рассмотрим следующий пример:
В этом примере свободно 10 ГБ памяти, ограниченной с использованием параметра minimum free . В случае, если потребуется выделить 5 ГБ памяти, то сделать это можно мгновенно. Для обеспечения 10 ГБ свободной памяти освобождается часть кэша. Выделение памяти будет происходить быстро, а кэш динамически уменьшаться, чтобы 10 ГБ всегда оставались свободными. Распределение памяти будет выглядеть следующим образом:
Точная настройка этих параметров зависит от вашей нагрузки. Для Aerospike, если это позволяет доступный объем памяти, должно быть не менее 1,1 ГБ свободной памяти в min_free_kbytes . Тогда кэш будет в достаточном объеме, оставляя место для размещения приложений.
Настройка выполняется следующим образом:
NUMBER — количество килобайт, которые должны быть свободны в системе.
Чтобы на компьютере со 100 ГБ оставить 3% памяти незанятыми, выполните следующую команду:
Aerospike рекомендует оставлять не менее 1,1 ГБ в min_free_kbytes , т.е. 1153434.
В системе с общим объемом памяти более 37 ГБ следует оставлять не более 3% свободной памяти min_free_kbytes , чтобы ядро не тратило слишком много времени на ненужное восстановление памяти. В таких системах это будет составлять от 1,1 ГБ до 3% от общего объема оперативной памяти.
При установке этого параметра следует проявлять осторожность: слишком маленькое или слишком большое значение может отрицательно сказаться на производительности системы. Слишком низкое значение min_free_kbytes не позволит системе освободить память. Что может привести к зависанию системы или уничтожению процессов через OOM.
Слишком большое значение (5-10% от общей памяти) приведет к тому, что в системе быстро закончится память. Linux для кэширования данных файловой системы использует всю доступную оперативную память. Установка высокого значения min_free_kbytes может привести к тому, что система будет тратить слишком много времени на восстановление памяти.
RedHat рекомендует поддерживать min_free_kbytes на уровне 1-3% от объема памяти в системе. При этом Aerospike рекомендует оставлять не менее 1,1 ГБ, даже если это выше официально рекомендуемого значения.
Также рекомендуется либо уменьшать параметр swappiness до нуля, либо не использовать своп. В любом случае для операций с низкой задержкой использование свопа резко снизит производительность.
Установите значение swappiness в 0 , чтобы уменьшить потенциальную задержку:
Примечания
ВАЖНО: Все изменения, указанные выше, НЕ сохраняются. Они действуют только во время работы машины. Чтобы изменения были постоянными, необходимо внести их в /etc/sysctl.conf .
Добавьте следующие строки:
Как всегда, будьте внимательны при редактировании подобных параметров. Проверьте их на тестовых серверах перед внесением изменений в продакшн-окружение.
Еще один параметр, аналогичный вышеуказанному, — zone_reclaim . К сожалению, этот параметр вызывает агрессивное восстановление и сканирование. Поэтому лучше его отключить. Во всех новых ядрах и дистрибутивах этот параметр по умолчанию выключен.
Для проверки, что zone_reclaim отключен используйте следующую команду:
Если вам интересно узнать о курсе подробнее, приглашаем на день открытых дверей онлайн, где преподаватель расскажет о формате обучения и программе.
Источник
unixforum.org
Форум для пользователей UNIX-подобных систем
- Темы без ответов
- Активные темы
- Поиск
- Статус форума
Разбираемся в кэшах Linux систем и Swaping-е
Модератор: Bizdelnick
Разбираемся в кэшах Linux систем и Swaping-е
Сообщение Gineaser » 05.06.2011 21:52
Доброго время суток.
Только начал осваивать линукс. Поэтому периодически возникают достаточно специфические вопросы, на которые я не смог найти ответы быстрым поиском по гуглу.
Есть сервер на базе Ubuntu-Server. На нем 12Gb оперативной памяти, а так же swap раздел объемом 20Gb. Решил разобрать по поводу кэша в линукс системах.
Мне кажется эта тема станет полезной не только для меня, но и для других пользователей операционных систем Unix и, наверное, даже для тех, кто далеко не новичок.
Для контроля за оперативной памятью, \\\\\\\»коробочного решения\\\\\\\» я знаю следующие методы: (Нажать на spoiler для просмотра)
Вывод команды free -m:
Вывод cat /proc/meminfo:
Изучение документации помогло кое что понять.
Во первых swap . Если swaping включен (man swapon, /proc/swaps) не используемые страницы в памяти будут скидываться в виртуальную область на жестком диске, тем самым освобождая физическую память (оперативную) и давая ресурсы для других приложений. Когда требуется обратиться к тем страницам, которые содержатся в свопе, они считываются с жесткого диска, помещаются в оперативку и обрабатываются.
Свапингом можно управлять, к примеру установить планку (значение свободной оперативки) при котором не используемые страницы начнут скидываться на жесткий диск.
Делать это можно посредством занесения значения в файл /proc/sys/vm/swappiness. По умолчанию значение 60. Оно в процентах. Что бы было проще понять приведу пример:
Если у меня оперативная память забивается больше чем на 40%, то не используемые страницы начинают писать на жесткий диск в swap. Если поставим значение 5% то swap начнет использоваться когда оперативная память забьется на 95%.
Еще, насколько я понял, можно то же самое сделать но с ограничением по количеству доступных страниц оперативки. Делается это в файле /proc/sys/vm/freepages
Файл имеет 3 значения через пробел в строчку. .
Первое значение — это предел, при котором система перестанет хранить в памяти не используемые страницы и начнет все скидывать в свап
Второе значение — это количество свободных страниц в оперативке, при котором система начнет \\\\\\\»суетится\\\\\\\» по в документации, на сколько я понял. Т.е. начнет активно использовать свап.
Третье значение — это количество свободных страниц в оперативке при котором система не свапит не используемые страницы.
Есть еще способ управление непосредственно самими страницами в оперативной памяти по средствам файла /proc/sys/vm/kswapd
Так же 3 значения.
Первое значение — максимальное количество страниц которые будут выбрасываться из памяти за раз. Если обрабатываются очень большие объемы данных с использованием свапа, мне кажется стоит увеличивать это значение.
Второе значение — количество попыток свапинга страницы. Не совсем понимая глубокую физику процесса сваппинга не знаю как влияет это значение и на что.
Третье значение — тоже не сосем понял предназначение, но если всё же понял из документации — это количество страниц которые будут считываться из/в оперативку за один запрос на отпраку в свап или извлечение из свапа. Ставить слишком много думаю не разумно. Тут скорее надо исходить из специфики железа (шина оперативной памяти, частота, двухканальные и прочие режимы работы)
Во вторых существует еще 2 вида кэша, что представляет для меня особый интерес.
Первый кэш из них — это кэш inode и dentry дескрипторов.
На сколько я понял из англоязычной документации это кэш который помещается в оперативную память при обращение к каталогам в файловой системе, которые грубо говоря являются файлами, содержащими как раз эти дескрипторы:
— (метаданные файлов внутри этого каталога) inode — время последнего доступа, права, UID/GID, размер. Не содержат имен, тем самым не имеют привязку к конкретному файлу, который представляет собой для ОС — набор байт.
— dentry — привязывают inode файла и имя файла в ФС.
И логически рассуждая, я пришел к выводу что кэш inode и dentry увеличивают время доступа к конкретному файлу, т.е. метаданные и связи хранятся в оперативки и считывать их с блочных устройств не надо.
Управлять этим кешем (очищать) можно по средстам принудительного ввода в файл /proc/sys/vm/drop_caches значения 2. К примеру так: echo 2 > /proc/sys/vm/drop_caches
Но как включить этот кэш я не нашел, на сколько я могу судить по командам мониторинга оперативки выше, он не используется. Можно посмотреть информацию о этих кешах через cat /proc/slabinfo | grep inode/dentry. Еще можно так: cat /proc/sys/fs/dentry-state,
cat /proc/sys/fs/inode-state
Второй кэш — это pagecache .
И вот тут я не совсем понял для чего он вообще и что из себя представляет. Непосредственно именно он забивает оперативную память. Хорошо понятно что это не swap. И по названию это какие то страницы оперативной памяти. Но какие и страницы чего?
Наверно к этому кэшу можно отнести следующие настройки: /proc/sys/vm/buffermem
Указывается в процентах общее количество системной буферной памяти. Имеет три значения идущие в строчку и разделенные проблемами. Из документации понял что:
первое значение — минимальный уровень буферной памяти
второе значение — уровень буферной памяти, который будет работать в том случае, если вы уберете скажем линейку оперативки, т.е. произойдет уменьшение общего количества оперативной памяти (?) так или нет не знаю.
третье значение — уровень максимально доступной буферной памяти.
Очистка этого кэша производится вводом в файл /proc/sys/vm/drop_caches значения 1
Сразу очищается почти вся оперативная память. Сбоев в работе не замечено. После очистки необходимо выполнять sync.
Кстати значение \\\\\\\»0\\\\\\\» для файла /proc/sys/vm/drop_caches установит значение по дефолту, а значение \\\\\\\»3\\\\\\\» очистит и inode+dentry кэш + pagecache.
Все что узнал вкратце изложил. Если я чего то не понимаю или не правильно представляю, очень прошу поправить и объяснить. Особенно хочу узнать что же такое всё же pagecache.
Источник