Ознаки

Після інсталяції Microsoft SQL Server-2017 на RHEL 7,4, програма припиняє та створює дамп ядра, під час спроби запустити засіб mssql-conf. Крім того, такий запис з'явилася в журналах systemctl mssql сервер, служби (journalctl -u mssql server.service). 

Ця програма сталася критична помилка і не може працювати. Нижче діагностичну інформацію, можна знайти:         Причина: 0x00000003       Повідомлення: результати   Stacktrace: 00005577212bcd92 0000557721266767-процес: 590 - sqlservr       Тема:-594 (застосунку потік 0x1000)   Наприклад, код: afe0f97b-fdbc-4a4d-910c-038e7ee2049b      Аварійне завершення роботи з ідентифікатором: 544c4c67-0f49-4877-a959-92c14798d58e   Створення позначка: f7473acad6f0299cd161863aaa02e4284434ab6d915c7b467e2a14e907290249   Запис дампу та інформації.

Причина

Ця проблема виникає в тому, що SQL Server, 2017 на Linux сумісна з попередніх версій розміткою, Віргінія. Через настройки RHEL 7,4 увімкнуто усі процеси, запустіть за допомогою legacy_va_layout. 

Під час запуску SQL Server на Linux, перевіряє діапазони адрес. Якщо несумісність знаходить з попередніх версій Віргінія макет, виникає з надбання, припиняє програми та створює дамп ядра.

RHEL 7,4 може перейти з використанням застарілих Віргінія розташування для будь-якої з таких причин:

  • Плавне стека значень встановлено без обмежень (наприклад, змінені limits.conf сценарій або на ulimit -s параметр).

  • Глобальний старих Віргінія макет увімкнуто, (для прикладу, sysctl vm.legacy_va_layout або змінити /etc/sysctl.conf).

Спосіб вирішення

  1. На макеті /etc/security/limits.conf додайте новий рядок і введіть такий код:      mssql soft stack 8192 root soft stack 8192

  1. На макеті /etc/sysctl.conf додайте новий рядок і введіть такий код:     vm.legacy_va_layout = 0

  2. Перезавантажте комп'ютер:  reboot

  1. Переконайтеся, що стек гнучке налаштування для користувачів, корінь та mssql, 8192. Перейти в контексті користувача і запустіть таку команду:  ulimit -s

  1. Переконайтеся, що глобальний старих Віргінія є 0:   Sysctl vm.legacy_va_layout

Додаткові відомості

Перевірка максимальний розмір стека

Перевірка максимальний розмір стека, так і legacy_va_layout значення (значення за промовчанням, з нового встановлення RHEL-7).

 [root@localhost ~]# sysctl vm.legacy_va_layout  vm.legacy_va_layout = 0  [root@localhost ~]# ulimit -s  8192

Під час цих параметрів внесені до x64, у системі, адреса місця розташування приблизно такого вигляду:

--- + + TASK_SIZE ((1UL << 47)-PAGE_SIZE) |            СТЕК | +----------------------+ --- + + MMAP_BASE (STACK_SIZE + RND_OFFSET) |          MMAP() | | vvvvvvvvvvvvvvvvvvvv | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |^^^^^^^^^^^^^^| |            ДИНАМІЧНА ПАМ'ЯТЬ | +----------------------+ |     ЕЛЬФ СЕГМЕНТІВ | +----------------------+ --- + + 0

MMAP_BASE, розташований у верхній частині адресного простору. Як і зіставлення додаються, розподілу простору адрес "зростає роботи." Це для RHEL, параметри за промовчанням, і є те, що очікує зіткнутися під час запуску SQL Server.

Запуск програми простий

Запуск простого програми, що mmaps сторінки а також повертає адресу повертається ядра (наприклад,):

mmap code ========= #include <stdio.h> #include <sys/mman.h>   int main() {     void* result = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);     printf("mmap %p\n", result);     return 0; }   [root@localhost ~]# ./mmap  mmap 0x7fb6976d6000

Однак, якщо один або обидва параметри змінюються, Віргінія розташування, можуть повернутися до попередніх версій розташування:

--- + + TASK_SIZE ((1UL << 47)-PAGE_SIZE) |            СТЕК | | vvvvvvvvv ^ vvvvvvvvvv | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |^^^^^^^^^^^^^^| |          MMAP() | --- + + TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 3)) |                                  | |                                  | |                                  | |^^^^^^^^^^^^^^| |            ДИНАМІЧНА ПАМ'ЯТЬ | +----------------------+ |     ЕЛЬФ СЕГМЕНТІВ | +----------------------+ --- + + 0

Тут на MMAP_BASE розміщено в одну третю частину адресного простору. Як і зіставлення додаються, розподілу простору адрес "зростає" (розгортання). Через те, що ми маємо 47 розряду, віртуальний адресний простір, у 64-розрядних Linux, MMAP_BASE отримує розміщені навколо 42nd ТБ-віртуальний "0x2A0000000000". Таким чином, mssql натикається на адреси, які вже зіставлено нижче 64 ТБ під час спроби встановити його фіксована карти.

Налаштування розмір стека, збільшення необмеженими-«необмежений»

 [root@localhost ~] # ulimit -s необмежена  [root@localhost ~] #. / ММАП ММАП, 0x2b6634464000

* налаштування vm.legacy_va_layout

 [root@localhost ~] # ulimit -s 8192  [root@localhost ~] # sysctl -w-vm.legacy_va_layout=1  VM.legacy_va_layout = 1  [root@localhost ~] #. / ММАП ММАП, 0x2b46f28f9000

Ту ж дію параметра vm.legacy_va_layout можна отримати, змінивши розширення Необмежена, розмір стека. Різниця те, що після того, як адміністратор, набори vm.legacy_va_layout=1, система буде глобальний використовувати, старих Віргінія-макет для всіх процесів. (Єдиний спосіб, щоб перезаписати цей є, скинувши, ручки, sysctl 0). Проте якщо vm.legacy_va_layout=0 (за промовчанням), можна змінити, характерна, змінивши граничний розмір стека, на основі входу сеансу центром ulimit (або настроювання limits.conf).

Потрібна додаткова довідка?

Отримуйте нові функції раніше за інших

Приєднатися до Microsoft оцінювачів >

Ця інформація корисна?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?

Дякуємо за відгук!

×