Гайд 1С: Тюнинг параметров HugePages и Transparent Huge Pages в Linux для 1С
- Внезапные периодические микрозависания сервера СУБД PostgreSQL на несколько секунд.
- Высокое потребление системного времени процессора (параметр
%sysв утилитеtopилиsar). - Высокие задержки выделения памяти демоном ядра
khugepaged. - Утечки и фрагментация адресного пространства оперативной памяти.
1. Принудительное отключение Transparent Huge Pages (THP)
Механизм Transparent Huge Pages (THP) динамически объединяет стандартные 4 КБ страницы в 2 МБ блоки. Для баз данных со случайным доступом (PostgreSQL под 1С) это вызывает блокировки памяти при дефрагментации. THP должен быть отключен.
Добавьте параметры в строку загрузки ядра в /etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="... transparent_hugepage=never"Обновите GRUB и отключите в runtime:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
update-grub || grub2-mkconfig -o /boot/grub2/grub.cfg2. Настройка статических HugePages под PostgreSQL
Статические страницы (HugePages) фиксируются в RAM и не вытесняются в своп, ускоряя трансляцию адресов TLB процессора.
Рассчитайте число страниц (например, для shared_buffers = 32GB при размере страницы 2MB потребуется 16384 страниц):
# /etc/sysctl.d/99-hugepages.conf
vm.nr_hugepages = 16800
vm.hugetlb_shm_group = 1001 # GID группы postgresВ postgresql.conf установите:
huge_pages = on # Либо 'try' для безопасной проверки Частые вопросы (FAQ)
Почему Transparent Huge Pages (THP) вреден для PostgreSQL и 1С?
Фоновый поток khugepaged пытается уплотнять страницы памяти во время активных транзакций, захватывая блокировки mmap_lock, что приводит к полной остановке процессов СУБД на время компактификации.
Как проверить, что Transparent Huge Pages действительно отключен?
Выполните: cat /sys/kernel/mm/transparent_hugepage/enabled. Квадратные скобки должны стоять на слове [never].
Что произойдет, если nr_hugepages выделено меньше, чем размер shared_buffers?
При параметре huge_pages = on служба PostgreSQL откажется запускаться с ошибкой нехватки разделяемой памяти. При huge_pages = try сервер откатится к стандартным 4KB страницам.
Нужно ли настраивать HugePages для сервера приложений 1С (rphost)?
Нет, рабочие процессы rphost создают множество короткоживущих потоков и структур с динамическим выделением памяти, для них используются стандартные 4 КБ страницы ОС.