前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【云顾问-混沌】Pod/Node 内存高负载故障注入

【云顾问-混沌】Pod/Node 内存高负载故障注入

原创
作者头像
冷淡然
修改2024-03-15 12:05:08
1650
修改2024-03-15 12:05:08
举报

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% 内存
代码语言:bash
复制
./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。
代码语言:bash
复制
# 1、挂载目录
mkdir -p  ${PATH}/burnmem_tmpfs
mount -t tmpfs tmpfs ${PATH}/burnmem_tmpfs -o size=100%
# 2、计算内存占用的值,填充文件,速率为 100Mb/s
dd if=/dev/zero of=${PATH}/burnmem_tmpfs/file bs=1M count=${fillMem}

5. 验证故障生效

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 介绍
  • 2. 参数
  • 3. 案例
    • 3.1 占用 80% 内存
    • 4. 实现原理
    • 5. 验证故障生效
    相关产品与服务
    混沌演练平台
    混沌演练平台(Chaotic Fault Generator)提供高效便捷、安全可靠的故障演习服务,除可视化故障注入服务外,还提供行业经验模板,监控护栏等核心功能,致力于帮助用户及时发现业务容灾隐患、验证高可用预案的有效性,从而提高系统的可用性和韧性。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档