写点什么

Pod/Node 内存高负载故障注入

  • 2024-01-29
    广东
  • 本文字数:985 字

    阅读完需:约 3 分钟

Pod/Node 内存高负载故障注入

1. 介绍

在复杂的分布式系统中,为了验证服务质量、监控告警、流量调度、弹性伸缩等能力,我们需要模拟不同的故障场景。本文将介绍如何使用混沌工具对 Pod/Node 进行内存负载故障注入,以达到指定的内存占用百分比。腾讯云混沌演练平台故障动作:标准集群 Pod/普通节点-内存利用率高。

2. 参数

在进行内存负载故障注入时,我们可以通过以下参数来控制:

  • percent:内存使用率,取值是 0 到 100 的整数,默认值为 100。此参数为可选。

  • mode:内存占用模式,有 ram 和 cache 两种。ram 采用代码实现,可控制占用速率,优先推荐此模式。cache 是通过挂载 tmpfs 实现 (只支持物理机模式使用)。默认值为 cache。

  • reserve:保留内存的大小,单位是 MB,如果 percent 存在,则优先使用 percent 参数。此参数为可选。

  • rate:内存占用速率,单位是 MB/S,默认值为 100MB/s。此参数为可选。

  • oomGuard:是否降低故障注入进程被操作系统 oom-kill 可能性。开启后,会提升业务进程被 oom-kill 可能性。仅在 RAM 模式生效。默认值为 false。此参数为可选。

  • duration:自动恢复时长,到达时间后会自动销毁故障。单位是秒。通用参数,默认值为 60。

3. 案例

3.1 占用 80% 内存


./chaos-executor attack --target mem --action burn --flags "mode=ram;percent=80;duration=100"
复制代码

4. 实现原理

混沌工具在进行内存负载故障注入时,主要通过以下方式实现:

  1. ram 模式:启动进程 chaos_burnmem 不断申请内存,模拟主机/容器内存负载升高。当主机内存接近满载时,出于系统保护,操作系统会根据 OOM-KILL 算法,选择一些进程杀死。通常 chaos_burnmem 进程会被杀死。为了保护该进程在故障注入期间一直存在,不被杀死,可以打开 oomGuard 保护,降低该进程 oom-kill 权重,优先杀死其他进程。设置高负载的内存故障注入后,可能会使得机器无法登入与控制,请谨慎使用。

  2. cache 模式:通过挂载 tmpfs 来实现内存占用。首先,挂载目录,然后计算内存占用的值,填充文件,速率为 100Mb/s。

# 1、挂载目录mkdir -p  ${PATH}/burnmem_tmpfsmount -t tmpfs tmpfs ${PATH}/burnmem_tmpfs -o size=100%# 2、计算内存占用的值,填充文件,速率为 100Mb/sdd if=/dev/zero of=${PATH}/burnmem_tmpfs/file bs=1M count=${fillMem}
复制代码

5. 验证故障生效

我们可以通过以下命令查看内存使用情况,以验证故障是否生效:

物理机:通过 top + m 命令查看内存使用比例。

容器:通过 docker


发布于: 刚刚阅读数: 3
用户头像

检验系统稳定,构建韧性业务 2023-10-16 加入

腾讯混沌演练平台提供高效便捷、安全可靠的故障演习服务,除可视化故障注入服务外,还提供行业经验模板,监控护栏等核心功能,助力用户及时发现业务容灾隐患、验证高可用预案的有效性,从而提高系统的可用性和韧性。

评论

发布
暂无评论
Pod/Node 内存高负载故障注入_k8s_腾讯云混沌演练平台_InfoQ写作社区