PowerFlex: 메모리 할당 실패로 인한 MDM 전환 실패 - mos_MemMalloc
Summary: MDM 소유권을 전환할 때(수동 또는 기타) 클러스터에 운영 MDM이 없는 메모리 할당 실패로 인해 수신 MDM이 제대로 실행되지 않습니다.
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.
수신 MDM의 exp.0 파일에는 다음과 같은 항목이 있습니다.
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 파일은 events.txt와 마찬가지로 MDM 서비스를 여러 번 재시작하는 것을 보여줍니다.
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
Resolution
이는 ScaleIO 문제가 아닙니다. ScaleIO가 정상적으로 작동하고 있습니다.
vm.overcommit 설정을 확인 및/또는 수정하려면 다음 단계를 수행합니다.
1. SSH를 루트
로 사용하여 SDS에 로그인합니다. 2. Windows 업그레이드를 실행하라는 프롬프트에 아래 내용이 표시될 때까지
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로 설정하면 메모리를 오버커밋하지 않아도 됩니다. 이렇게 하면 오버커밋 제한을 초과하는 메모리 할당에 실패합니다. 시스템의 총 주소 공간 커밋은 물리적 RAM의 스왑 + 구성 가능한 양(기본값은 50%)을 초과할 수 없습니다. 이 설정이 0이면 명백한 오버커밋 요청을 거부하지만 루트 프로세스는 오버커밋 제한을 초과하여 할당할 수 있습니다.
현재 오버커밋 제한과 커밋된 양을 확인하려면 다음 명령에서 각각 CommitLimit 및 Committed_AS를 참조하십시오.
#cat /proc/meminfo MemTotal: 8174572 kB .. CommitLimit: 4087284 kB Committed_AS: 3879388 kB
이 호스트에는 8GB의 RAM이 있고 CommitLimit는 총 주소 공간의 50%인 ~4GB로 설정됩니다.
이 문제를 해결하려면 /etc/sysctl.conf에서 다음 중 하나를 추가/편집합니다.
- "vm.overcommit_ratio"를 100으로 변경하여 OS가 사용 가능한 총 주소 공간을 커밋하고 재부팅할 수 있도록 합니다.
이러한 설정에 대한 자세한 내용은 오버커밋 계산에 대한 Linux 커널 설명서를 참조하십시오