[Настройка Linux] Настройка ядра Linux для повышения производительности памяти
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Материал переведен. Ссылка на оригинал
Контекст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 может привести к временному кратковременному снижению скорости. По этой причине очищать кэш не рекомендуется. Вместо этого, лучше сообщить системе, что определенный объем памяти всегда должен быть свободен и его нельзя занимать кэшем.При необходимости очистку кэша можно выполнить следующим образом:
# clear page cache (above type 2 and 3)
$ echo 1 > /proc/sys/vm/drop_caches
# clear slab cache (above type 4)
$ echo 2 > /proc/sys/vm/drop_caches
# clear page and slab cache (types 2,3,4)
$ echo 3 > /proc/sys/vm/drop_caches
Большую часть памяти занимает page cache, поэтому если очищаете кэш, то рекомендуется очищать его (echo 1).Для исправления проблемы можно установить минимальное количество свободной памяти. Рассмотрим следующий пример:
Total RAM: 100GB
Used: 10GB
Buffers: 40GB
Minimum free: 10GB
Cache: 40GB
В этом примере свободно 10 ГБ памяти, ограниченной с использованием параметра minimum free. В случае, если потребуется выделить 5 ГБ памяти, то сделать это можно мгновенно. Для обеспечения 10 ГБ свободной памяти освобождается часть кэша. Выделение памяти будет происходить быстро, а кэш динамически уменьшаться, чтобы 10 ГБ всегда оставались свободными. Распределение памяти будет выглядеть следующим образом:
Total RAM: 100GB
Used: 10GB
Buffers: 45GB
Minimum free: 10GB
Cache: 35GB
Точная настройка этих параметров зависит от вашей нагрузки. Для Aerospike, если это позволяет доступный объем памяти, должно быть не менее 1,1 ГБ свободной памяти в min_free_kbytes. Тогда кэш будет в достаточном объеме, оставляя место для размещения приложений.
$ cat /proc/sys/vm/min_free_kbytes
67584
Настройка выполняется следующим образом:
echo NUMBER > /proc/sys/vm/min_free_kbytes
NUMBER - количество килобайт, которые должны быть свободны в системе.Чтобы на компьютере со 100 ГБ оставить 3% памяти незанятыми, выполните следующую команду:
echo 3145728 > /proc/sys/vm/min_free_kbytes
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, чтобы уменьшить потенциальную задержку:
echo 0 > /proc/sys/vm/swappiness
ПримечанияВАЖНО: Все изменения, указанные выше, НЕ сохраняются. Они действуют только во время работы машины. Чтобы изменения были постоянными, необходимо внести их в /etc/sysctl.conf.Добавьте следующие строки:
vm.min_free_kbytes = 1153434
vm.swappiness = 0
Как всегда, будьте внимательны при редактировании подобных параметров. Проверьте их на тестовых серверах перед внесением изменений в продакшн-окружение.Еще один параметр, аналогичный вышеуказанному, — zone_reclaim. К сожалению, этот параметр вызывает агрессивное восстановление и сканирование. Поэтому лучше его отключить. Во всех новых ядрах и дистрибутивах этот параметр по умолчанию выключен.Для проверки, что zone_reclaim отключен используйте следующую команду:
$ sysctl -a |grep zone_reclaim_mode
vm.zone_reclaim_mode = 0
Перевод материала подготовлен в рамках курса "Administrator Linux. Advanced". Если вам интересно узнать о курсе подробнее, приглашаем на день открытых дверей онлайн, где преподаватель расскажет о формате обучения и программе. РЕГИСТРАЦИЯ
Материал переведен. Ссылка на оригинал
===========
Источник:
habr.com
===========
Похожие новости:
- [Управление продуктом] Путаница с рецептом Scrum (перевод)
- [Настройка Linux] Архитектура контейнеров, часть 2. Пользовательское пространство
- [Управление продажами] Формы поддержки клиентов: как структурировать службу поддержки клиентов (перевод)
- [Системное программирование] Домен, поддомен, ограниченный контекст, пространство задач/решений в DDD: четко определены (перевод)
- [Робототехника, Софт] RPA уже превзошла ожидания по повышению эффективности работы государственного сектора (перевод)
- [Big Data, Машинное обучение] Google выпускает MLP-Mixer: MLP архитектуру для компьютерного зрения
- [Cisco, Сетевое оборудование] Как добавить коммутатор в стек Cisco C2960X и ничего не сломать
- [] 10 ловушек, связанных с требованиями, которых следует избегать (перевод)
- [Настройка Linux, *nix] Краткое руководство по LXC в ОС Эльбрус
- [PHP, Программирование] PHP 8: встроенное наблюдение (перевод)
Теги для поиска: #_nastrojka_linux (Настройка Linux), #_linux, #_linux_kernel, #_administrator_linux (администратор linux), #_blog_kompanii_otus (
Блог компании OTUS
), #_nastrojka_linux (
Настройка Linux
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 08:49
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Материал переведен. Ссылка на оригинал КонтекстLinux старается оптимизировать использование памяти, занимая свободное место кэшем. Если память никак не используется, то это память, потраченная впустую.Кэш заполняется данными по мере работы системы и когда приложениям требуется память, ядро ищет среди страниц кэша блок подходящего размера, освобождает его и выделяет приложению.В некоторых случаях этот процесс может влиять на производительность, поскольку освобождение кэша занимает больше времени, чем просто доступ к неиспользуемой оперативной памяти. Поэтому иногда можно наблюдать снижение производительности.Причина этого исключительно в том, что оперативная память используется на полную мощность, и других симптомов, кроме случайного эпизодического увеличения задержек, может и не быть. Такая же картина может наблюдаться, если жесткий диск не справляется с чтением и записью. Влияние может быть и на такие компоненты операционной системы как сетевая карта / iptables / ebtables / iproute2 — вместо реальной причины вы видите проблемы в сетевой задержке. В этой статье обсудим это подробнее и посмотрим, как минимизировать воздействие на систему.ОбъяснениеВ Linux есть несколько видов кэшей:
# clear page cache (above type 2 and 3)
$ echo 1 > /proc/sys/vm/drop_caches # clear slab cache (above type 4) $ echo 2 > /proc/sys/vm/drop_caches # clear page and slab cache (types 2,3,4) $ echo 3 > /proc/sys/vm/drop_caches Total RAM: 100GB
Used: 10GB Buffers: 40GB Minimum free: 10GB Cache: 40GB Total RAM: 100GB
Used: 10GB Buffers: 45GB Minimum free: 10GB Cache: 35GB $ cat /proc/sys/vm/min_free_kbytes
67584 echo NUMBER > /proc/sys/vm/min_free_kbytes
echo 3145728 > /proc/sys/vm/min_free_kbytes
echo 0 > /proc/sys/vm/swappiness
vm.min_free_kbytes = 1153434
vm.swappiness = 0 $ sysctl -a |grep zone_reclaim_mode
vm.zone_reclaim_mode = 0 Перевод материала подготовлен в рамках курса "Administrator Linux. Advanced". Если вам интересно узнать о курсе подробнее, приглашаем на день открытых дверей онлайн, где преподаватель расскажет о формате обучения и программе. РЕГИСТРАЦИЯ
=========== Источник: habr.com =========== Похожие новости:
Блог компании OTUS ), #_nastrojka_linux ( Настройка Linux ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 08:49
Часовой пояс: UTC + 5