Параметры SYSCTL#

DataGrid — Java-приложение, которое запускается на виртуальной машине Java (JVM). JVM является надстройкой для операционной системы и не может управлять памятью на самом низком уровне и ядром Linux, а также не распределяет память между SWAP и ОЗУ. Основная задача DataGrid — работа с данными в оперативной памяти, поэтому для бесперебойной работы и увеличения производительности приложения рекомендуется использовать настройки вида vm.*.

Операционная система не сразу записывает модификации файловых данных на диск, сначала она записывает их в страничный кеш. Эта стратегия называется кешированием с отложенной записью (write-back caching). Отложенная запись подразумевает, что за запись «грязных» страниц на диск отвечает фоновый процесс. «Грязная» страница — страница, которая обновилась в оперативной памяти, но не записалась в соответствующий файл партиций. В Linux этим занимается pdflush — множество потоков ядра, которые отвечают за отложенную запись «грязных» страниц. Процесс сброса «грязных» страниц на диск называется очищением.

Параметры:

Значение

Описание

vm.swappiness=0

Рекомендует системе, как часто ей использовать подкачку (swap). Может принимать значения от 0 до 200. Чем выше значение, тем более часто используется подкачка. При значении 0 параметр рекомендует системе использовать подкачку только в тех случаях, когда не осталось других способов выделить память.

vm.swappiness=0 не гарантирует, что данные не попадут на диск вместо оперативной памяти, если подкачка включена. Если она включена и какие-то данные оказались на диске, доступ к ним будет занимать намного больше времени, чем при нахождении в ОЗУ. Это приводит к проблемам с производительностью.

Чтобы избежать подобных ситуаций, рекомендуется отключать подкачку на уровне операционной системы. Для проверки, включена ли подкачка, используйте команду swapon --show

vm.overcommit_ratio = 100

Процент всей памяти, которую можно выделить одному процессу.

Параметр работает совместно vm.overcommit_memory = 2. При таком значении сумма всей виртуальной памяти, которая выделена всем процессам, не может превышать сумму физической памяти. При этом каждому отдельному процессу выделяется не больше памяти, чем указано в процентах в параметре vm.overcommit_ratio

vm.overcommit_memory = 2

Отказ обработки запросов памяти, размер которой превышает суммарный размер памяти пространства подкачки (swap) и ОЗУ в соответствии с overcommit_ratio.

Значение 2 позволяет серверному процессу максимально использовать оперативную память без значительного риска принудительного завершения от OOM (Out-Of-Memory) Killer. Приложение сможет перезагружаться, но только в пределах перерасхода — это снижает риск принудительного завершения процесса от OOM Killer

vm.dirty_background_ratio = 1

Процент памяти, заполненной «грязными» страницами, которые нужно записать на диск. Сброс на диск производится в фоновом режиме. Можно повысить производительность для операций с интенсивной записью с меньшим коэффициентом. Он указывает, что Linux будет сбрасывать «грязные» страницы в фоновом режиме

vm.dirty_ratio = 20

Такой же параметр, как vm.dirty_background_ratio, но сброс выполняется в рабочем сеансе и блокирует приложение.

Значение vm.dirty_ratio должно быть выше, чем vm.dirty_background_ratio. Это гарантирует, что фоновые процессы будут запускаться раньше, чтобы избежать максимально возможной блокировки приложения. Можно настроить разницу между этими двумя параметрами в зависимости от загрузки дискового ввода-вывода

vm.dirty_expire_centisecs = 500

Определяет, когда «грязные» данные достаточно устарели для отложенной записи потоками очищения. Данные, которые были «грязными» в памяти дольше этого интервала, запишутся во время следующего пробуждения потока

vm.dirty_writeback_centisecs = 100

Потоки очищения ядра периодически просыпаются и записывают старые данные на диск. Параметр настраивает интервалы времени между пробуждениями потоков

vm.nr_hugepages = 0

Определяет общее количество «огромных» страниц (страницы оперативной памяти, размер которых значительно превышает стандартный), доступных по всей системе

kernel.sched_migration_cost_ns = 5000000

Настройка в ядре Linux, которая влияет на процесс принятия решений планировщиком при миграции задач (процессов/потоков) между ядрами центрального процессора (ЦП). Планировщик определяет, какое ядро ЦП должно выполнить определенную задачу в любой момент времени. Стоимость миграции — накладные расходы, которые связаны с перемещением задачи с одного ядра процессора на другое.

Параметр нужен для того, чтобы процесс оставался на одном ядре и не перемещался на другие. Некорректная настройка параметра может привести к перегреву ЦП и регулированию записи стрнаиц (throttling). Подробнее об этом написано в разделе «Настройка Persistence» документа «Руководство прикладного разработчика»

net.ipv4.tcp_syncookies = 1

Разрешает/запрещает передачу SYN cookies вызывающему хосту в случае переполнения очереди SYN-пакетов для заданного сокета. Когда системе поступает слишком много запросов на соединение, очередь может переполниться. Запустится передача SYN cookies в ответ на каждый SYN-запрос.

Параметр используется для предотвращения атак SYN-flood. Может принимать два значения: 0 (выключено, по умолчанию) и 1 (включено)