PowerFlex:资源争用故障处理
요약: PowerFlex 资源争用问题和故障处理
증상
当 PowerFlex 进程与其他软件或硬件组件发生资源争用时,会导致 PowerFlex 进程出现异常行为。
这里的症状可能多种多样。这是症状和结果的部分列表
MDM 问题:
- 当 MDM 进程卡住并失去与其他 MDM 的通信时,会发生 MDM 所有权故障转移
From exp.0:
Panic in file /emc/svc_flashbld/workspace/ScaleIO-RHEL7/src/mos/umt/mos_umt_sched_thrd.c, line 1798, function mosUmtSchedThrd_SuspendCK, PID 36721.Panic Expression ALWAYS_ASSERT Scheduler guard seems to be dead.
From trc.*
24/02 15:54:16.087919 0:schedThrdGuard_SampleLivnes:01463: WARNING: pThread 0x106d9360(0) in scheduler 0x7fff580c4880, running UMT 0x7f39ad00ceb8, found to be stuck.
24/02 15:54:16.088226 ad417eb8:actorLoop_IsSchedThredStuck:10932: Stuck scheduler thread identified
24/02 15:54:16.088253 ad417eb8:actor_Loop:11257: Lost quorum. ourVoters: 0 votersOwnedByOther: [0,0]
24/02 15:54:16.088299 ---Planned crash, reason: Lost quorum, going down to let another MDM become master ---
- MDM 进程将在一段时间内不断断开连接和重新连接
2017-02-23 14:00:43.241 MDM_CLUSTER_LOST_CONNECTION WARNING The MDM, ID 089012db4d536880, lost connection
2017-02-23 14:00:43.422 MDM_CLUSTER_CONNECTED INFO The MDM, ID 089012db4d536880, connected
2017-02-23 23:05:25.852 MDM_CLUSTER_LOST_CONNECTION WARNING The MDM, ID 089012db4d536880, lost connection
2017-02-23 23:05:26.422 MDM_CLUSTER_CONNECTED INFO The MDM, ID 089012db4d536880, connected
2017-02-24 15:54:16.141 MDM_CLUSTER_LOST_CONNECTION WARNING The MDM, ID 089012db4d536880, lost connection
2017-02-24 15:54:16.238 MDM_CLUSTER_CONNECTED INFO The MDM, ID 089012db4d536880, connected
SDS 问题:
- SDS 将在一段时间内不断断开和重新连接
2017-02-15 13:18:16.881 SDS_RECONNECTED INFO SDS: siosds2 (ID 1eb052fe00000001) reconnected
2017-02-16 03:37:37.327 SDS_DECOUPLED ERROR SDS: siosds2 (id: 1eb052fe00000001) decoupled.
2017-02-16 03:39:54.300 SDS_RECONNECTED INFO SDS: siosds2 (ID 1eb052fe00000001) reconnected
2017-02-17 04:03:41.757 SDS_DECOUPLED ERROR SDS: siosds2 (id: 1eb052fe00000001) decoupled.
2017-02-17 04:09:13.604 SDS_RECONNECTED INFO SDS: siosds2 (ID 1eb052fe00000001) reconnected
- SDS 可能会在 trc 文件中显示有关与其他 SDS 节点的连接丢失的振荡错误:
14/02 19:13:24.096983 1be7eb8:contNet_OscillationNotif:01675: Con 1eb052fe00000005 - Oscillation of type 5 (RPC_LINGERED_1SEC) reported
14/02 19:13:24.196814 1be7eb8:contNet_OscillationNotif:01675: Con 1eb053000000000b - Oscillation of type 5 (RPC_LINGERED_1SEC) reported
14/02 19:13:24.296713 1be7eb8:contNet_OscillationNotif:01675: Con 1eb0530000000007 - Oscillation of type 5 (RPC_LINGERED_1SEC) reported
14/02 21:48:43.917218 afb28eb8:contNet_OscillationNotif:01675: Con 1eb052fe00000007 - Oscillation of type 1 (SOCKET_DOWN) reported
14/02 21:48:43.917296 afb28eb8:contNet_OscillationNotif:01675: Con 1eb052fe00000005 - Oscillation of type 1 (SOCKET_DOWN) reported
- SDS 可能会在 trc 文件中显示死锁或卡住的线程:
14/02 19:13:24.147938 9aa4eeb8:netPath_IsKaNeeded:01789: DEBUG ASSERT, Reason:Socket deadlocked. Crashing.
14/02 19:13:24.148113 9aa4eeb8:netPath_IsKaNeeded:01789: DEBUG ASSERT, Reason:Socket deadlocked. Crashing.
14/02 19:13:24.148121 9aa4eeb8:netPath_IsKaNeeded:01789: DEBUG ASSERT, Reason:Socket deadlocked. Crashing.
14/02 20:52:54.097765 242f0eb8:kalive_StartIntr:00346: KA aborted due to stuck sched thread
14/02 21:48:43.510602 7fa30eb8:kalive_StartIntr:00346: KA aborted due to stuck sched thread
14/02 21:48:44.776713 1b67ceb8:kalive_StartIntr:00346: KA aborted due to stuck sched thread
14/02 02:44:41.532007 e2239eb8:contNet_OscillationNotif:01675: Con 1eb052fd00000001 - Oscillation of type 3 (RCV_KA_DISCONNECT) reported
14/02 02:44:43.799135 0:schedThrdGuard_SampleLivnes:01463: WARNING: pThread 0x1a0de10(0) in scheduler 0x7fff01bec400, running UMT 0x7f94e221eeb8, found to be stuck.
14/02 02:44:43.799155 0:schedThrdGuard_SampleLivnes:01463: WARNING: pThread 0x1a0e050(1) in scheduler 0x7fff01bec400, running UMT 0x7f94e2227eb8, found to be stuck.
14/02 02:44:43.799257 e0e38eb8:cont_IsSchedThredStuck:01678: Stuck scheduler thread identified
14/02 02:44:43.799267 e0e38eb8:kalive_StartIntr:00346: KA aborted due to stuck sched thread
- SDS 可能会在 trc 文件中显示“错误分叉”:
01/09 00:37:51.329020 0x7f1001c58eb0:mosDbg_BackTraceAllOsThreads:00673: Error forking.
- 由于无法分配所需的内存,SDS 无法启动。
exp 日志文件中报告以下内容:
07/09 00:41:52.713502 Panic in file /data/build/workspace/ScaleIO-SLES12-2/src/mos/usr/mos_utils.c, line 235, function mos_AllocPageAlignedOrPanic, PID 25342.Panic Expression pMem != ((void *)0) .
-作系统也可能在 /var/log/messages 或系统事件日志中出现一些症状:
/var/log/messages:
Feb 14 13:25:08 ScaleIO-192-168-1-2 kernel: [7461116.683555] TCP: Possible SYN flooding on port 7072. Sending cookies.
Feb 14 13:25:08 ScaleIO-192-168-1-2 kernel: [7461116.683561] TCP: Possible SYN flooding on port 7072. Sending cookies.
Feb 14 13:25:08 ScaleIO-192-168-1-2 kernel: [7461116.683566] TCP: Possible SYN flooding on port 7072. Sending cookies.
Feb 14 13:25:08 ScaleIO-192-168-1-2 kernel: [7461116.683570] TCP: Possible SYN flooding on port 7072. Sending cookies.
Feb 14 13:27:39 ScaleIO-192-168-1-2 kernel: [7461266.566145] sched: RT throttling activated
“端口 7072 上的 SYN 泛洪”消息意味着网络数据包正在发送到此主机上的 SDS,而 SDS 无法接受该端口上的数据包。默认情况下,SDS 使用端口 7072。
“RT throttling activated”(RT 限制已激活)是一条消息,表明作系统调度程序已识别出一些实时线程占用 CPU 并使其他线程饥饿。作系统这样做是为了尝试限制这些实时任务,并防止作系统挂起或崩溃。
当 SDS 频繁断开连接或无法足够快地响应 SDC 并且仍在尝试为其拥有的 IO 块提供服务时,SDC 也可能会遇到 IO 错误。
影响
上述症状可能导致DATA_DEGRADED、DATA_FAILED事件以及CLUSTER_DEGRADED。
원인
如果上述所有症状均匹配,则很可能是 CPU 或内存资源不足问题。查找正在运行的第三方应用程序或进程,这些应用程序或进程可能会使 MDM 或 SDS 进程的 CPU 和内存不足。
在虚拟环境中,有几次 CPU 性能较差。这是由在同一资源池下定义的 SVM 引起的。
在这种情况下,我们应建议不要将 SVM 置于资源池中,而是按照 SVM 中的定义使用其专用资源。
해결
确保已针对性能设置调整 PowerFlex 组件(MDM、SDS、SDC)。请参阅此处提供的性能“微调”和“故障处理”指南。
配置审查:
- 首先,确认 SVM CPU 和 RAM 设置是否符合最佳实践:
- SVM CPU 设置:(可即时设置)
- 每个插槽的核心数:全部在一个插槽中,因此“插槽”的值为“1”。(核心总数由其托管的 SDS 的需求决定:全闪存、FG、DASCache、Cloudlink、3.5 等都会影响(增加)CPU 要求。)
- 保留:在下拉列表中选择“最大值”值
- 股票:高
- 这应该如下所示:
- SVM CPU 设置:(可即时设置)

b. SVM RAM 设置:(可即时设置)
- 选中“保留所有客户机内存(全部锁定)”
- 股票:高
- 这应该如下所示:

c. 来宾 SVM作系统内存过量使用设置:(需要重新启动)
-
- 运行 sysctl -a|grep 过量提交以确认过量使用设置正确无误:
# sysctl -a|grep overcommit vm.overcommit_memory = 2 vm.overcommit_ratio = 100 -
如果未设置上述值,则某些 SVM 内存将无法供 SDS 进程使用。通过编辑 /etc/sysctl.conf 并编辑/添加上述值来更正此设置
- 将 SDS 置于维护模式,然后重新启动 SVM 以应用设置
- 重新启动后通过运行“cat /etc/sysctl.conf|grep overcommit”进行确认
- 退出维护模式
- 运行 sysctl -a|grep 过量提交以确认过量使用设置正确无误:
- 要在日志中查找这些内容,请执行以下作:
- SVM 配置 (vmsupport):
-
正确配置的 SVM 的 .vmx 文件将包含以下内容:
-
- SVM 配置 (vmsupport):
sched.cpu.units = "mhz"
sched.cpu.affinity = "all"
sched.cpu.min = "25930" (nonzero value that's equal to core speed * the # of cores allocated)
sched.cpu.shares = "high"
sched.mem.min = "24576" (nonzero value that's a full allocation of configured memory)
sched.mem.minSize = "24576" (nonzero value that's a full allocation of configured memory)
sched.mem.shares = "high"
cpuid.coresPerSocket = "10" (value equal to total # of cores allocated, so they're all in one socket)
sched.mem.pin = "TRUE"
- 不正确(过时)SVM 配置将具有以下内容:
sched.cpu.min = "0"
sched.cpu.shares = "normal"
sched.mem.pin = "FALSE"
sched.mem.shares = "normal"
cpuid.coresPerSocket = "4" (value less than total # of cores allocated, usually 1/2 or 1/4)
-
正确配置的内存过量使用:
文件服务器/sysctl.txt包含:
vm.overcommit_memory = 2
vm.overcommit_ratio = 100
-
PowerFlex 使用大量 RAM,以在内存中高速运行每项服务。这就是为什么它不支持使用交换来分载任何 PowerFlex 服务。
HCI 解决方案中仅存储和 SVM 预期的默认设置为过量使用内存 2。这样,内核就不会超额订阅内存,并且在不使用任何交换的设置的情况下,确保没有commit_as值大于总可用/可用内存。
100 的比率可确保同时不使用交换,以便对使用的数据块交换进行更多控制。
-
错误配置的内存过量使用:
文件服务器/sysctl.txt包含:
vm.overcommit_memory = 0 (value not 2)
vm.overcommit_ratio = 50 (value less than 95)
其他可能的解决方法:
- 停止导致 CPU/内存资源不足的应用程序,或与应用程序供应商联系以获取更新,以缓解资源占用问题。
- 使用 CPU/内存趋势分析工具(top/sar/cron 作业/等)找出正在占用资源的应用程序。建议间隔 1 秒以获得必要的粒度,以显示问题发生的时间以及责任人
- 升级主机 CPU 和/或内存,为其提供更多资源
- 重新构建为双层设置,而不是融合系统(如果 SDS/SDC 在同一主机上)