Технологія PowerFlex: Помилка перемикання MDM через збої розподілу пам'яті - mos_MemMalloc

Summary: У разі зміни власника MDM (вручну або іншим способом) приймальна MDM не може відображатися належним чином через збої розподілу пам'яті, через що кластер не має основного MDM.

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

Події, виведені з приймального MDM /opt/emc/scaleio/mdm/bin/showevents.py, матимуть кілька записів для спроб взяти на себе основні обов'язки MDM протягом короткого часу один від одного:  

 2017-10-04 12:08:33.915 MDM_CLUSTER_BECOMING_MASTER WARNING This MDM, ID 394760fd6714xxxx, took control of 
the cluster and is now the Master MDM. 2017-10-04 12:08:33.915 MDM_BECOMING_MASTER WARNING This MDM is
 switching to Master mode. MDM will start running. .. 2017-10-04 12:08:34.309 MDM_CLUSTER_BECOMING_MASTER 
WARNING This MDM, ID 394760fd6714xxxx, took control of the cluster and is now the Master MDM. 
2017-10-04 12:08:34.309 MDM_BECOMING_MASTER WARNING This MDM is switching to Master mode. MDM will start 
running.

Файл exp.0 з отриманого MDM містить такі записи: 

 04/10 12:08:34.079823 Panic in file /data/build/workspace/ScaleIO-SLES12-2/src/mos/usr/mos_utils.c, line 73, 
function mos_MemMalloc, PID 9978.Panic Expression bCanFail . /opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(
mosDbg_PanicPrepare+0x115) [0x6a86f5] /opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(mos_MemMalloc+0x81) 
[0x6ac0d1] /opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(multiHeadMgr_GetUpdateMultiHeadsMsg+0x66) [0x57123c]
 /opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(tgtMgr_ConfigureTgt+0x9c1) [0x4d579e] 
/opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(tgtMgr_HandleWorkReq+0x41b) [0x4d6206] 
/opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211() [0x6c57d8] 
/opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(mosUmt_StartFunc+0xea) [0x6c51af]
 /opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(mosUmt_SignalHandler+0x51) [0x6c65d1]
 /lib64/libpthread.so.0(+0x10b00) [0x7f844e8a6b00] /lib64/libc.so.6(sleep+0xd4) [0x7f844d8911a4]

Файл /var/log/messages показує кілька перезапусків служби MDM, як це робить events.txt: 

 systemd[1]: mdm.service: Main process exited, code=exited, status=255/n/a systemd[1]: mdm.service: 
Unit entered failed state. systemd[1]: mdm.service: Failed with result 'exit-code'. systemd[1]: mdm.service:
 Service has no hold-off time, scheduling restart. systemd[1]: Stopped scaleio mdm. systemd[1]: mdm.service: 
Start request repeated too quickly. systemd[1]: Failed to start scaleio mdm. systemd[1]: mdm.service: Unit 
entered failed state. systemd[1]: mdm.service: Failed with result 'start-limit'.

Cause

Основна причина полягає в тому, що ОС Linux працює в межах стелі пам'яті та не може задовольнити запити на пам'ять служби MDM під час її ініціалізації. Це пов'язано з тим, що параметри параметрів ядра налаштовані неправильно.
Примітка: Якби ОС дійсно виділила більше пам'яті, ніж було фізично доступно, у файлі повідомлень було б видно повідомлення oom-killer, а інші служби та процеси були б припинені до цих збоїв.

Resolution

Це не проблема ScaleIO. ScaleIO працює за призначенням.

Щоб перевірити та/або змінити налаштування vm.overcommit, виконайте такі дії:

1. Увійдіть в SDS за допомогою SSH від імені root

2. Бігти 

cat /etc/sysctl.conf | grep "vm.overcommit"
Ex.
[root@sds-node logs]# cat /etc/sysctl.conf | grep "vm.overcommit"
vm.overcommit_memory = 2
vm.overcommit_ratio = 50

3. Виконайте наступні команди.

sed -i 's/vm\.overcommit_memory = .*/vm\.overcommit_memory = 2/g' /etc/sysctl.conf
sed -i 's/vm\.overcommit_ratio = .*/vm\.overcommit_ratio = 100/g' /etc/sysctl.conf
sysctl -p

Перевірки

[root@sds-node logs]# cat /etc/sysctl.conf | grep "vm.overcommit"
vm.overcommit_memory = 2
vm.overcommit_ratio = 100


Повторіть ці кроки для всіх SDS у середовищі, які зазнали впливу, щоб переконатися, що для них встановлено рекомендовані параметри найкращої практики. Вам не потрібно переводити SDS в режим обслуговування, щоб виконати цю операцію. 

Щоб дізнатися більше про ці налаштування, перегляньте документацію ядра Linux про облік перекомітів

Additional Information

Перевірте параметри ядра sysctl на перевантаження пам'яті:

# sysctl -a |grep commit
vm.overcommit_memory = 2 (default is 0)
vm.overcommit_ratio = 50 (default is 50)

У цьому випадку, маючи "vm.overcommit_memory" встановлено на 2, це означає, що ви не перевантажуєте пам'ять. При цьому не вдається виділити пам'ять, яка перевищує ліміт перевантаження. Загальний коміт адресного простору для системи не повинен перевищувати swap + налаштовуваний обсяг (за замовчуванням 50%) фізичної оперативної пам'яті. Коли цей параметр дорівнює 0, він відхиляє очевидні запити на перекоти, але кореневим процесам дозволено виділяти вище ліміту перекоміту. 

Щоб перевірити поточний ліміт перевищення зобов'язань та суму переплати, дивіться CommitLimit та Committed_AS, відповідно, з наступної команди:

#cat /proc/meminfo 
MemTotal: 8174572 kB 
.. 
CommitLimit: 4087284 kB 
Committed_AS: 3879388 kB

На цьому хості 8 ГБ оперативної пам'яті, а CommitLimit встановлений на ~4 ГБ, що становить 50% від загального адресного простору.

 

Щоб вирішити цю проблему, додайте/відредагуйте одне з наступних у /etc/sysctl.conf:

 - Змініть "vm.overcommit_ratio" на 100, щоб ОС могла зафіксувати загальний доступний адресний простір і перезавантажитися.

Щоб дізнатися більше про ці налаштування, перегляньте документацію ядра Linux про облік перекомітів

Affected Products

PowerFlex rack, VxFlex Product Family
Article Properties
Article Number: 000030300
Article Type: Solution
Last Modified: 22 Sept 2025
Version:  7
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.