开发者社区 > 云原生 > 中间件 > 正文

ChaosBlade中在环境执行这个参数是不是没有生效呀?

"ChaosBlade中在环境执行blade create mem load --mode ram --mem-perment 100 --avoid-being-killed ,当目标pod内存打满,新增--avoid-being-killed这个参数后,chao_os进程还是很快被干掉,在1.7.1版本,这个参数--avoid-being-killed是不是没有生效呀?我看了下chaoblade日志,报的是score adjust file : proc/52/oom_adj not exsits,stat proc/52/oom_adj no such file or directory
但是我在目标pod内,查看这个52是chao_os进程,cat proc/52/oom_adj 输出结果是15,
看来oom_adj的值还是15,没设成-17啊。代码内部执行流程,是不是在目标pod内 执行命令 echo -17 > /proc/52/oom_adj ?"

展开
收起
小易01 2023-12-12 23:45:37 78 0
2 条回答
写回答
取消 提交回答
  • 意中人就是我呀!

    可以看一下是否有error日志: cannot edit the process oom_score_adj。因为目前是在 daemonset 容器里面执行子进程去注入的,所以就报了文件找不到。得切命名空间,执行set oom_adj ,另外mnt 不好切,可以通过 LD_PRELOAD 实现切换,简单一点就是使用 HOST_PID (应该默认就是),然后直接找 /proc/容器ID/root/proc/52/oom_adj 这样。此答案整理至钉群"ChaosBlade开源讨论群"。

    2023-12-13 12:34:00
    赞同 展开评论 打赏
  • 使用 ChaosBlade 工具来模拟内存压力测试,并且尝试使用 --avoid-being-killed 参数来防止 chao_os 进程被操作系统杀死。根据你的描述,似乎这个参数并没有按预期工作。

    首先,/proc/52/oom_adj 文件是 Linux 内核用来控制进程在内存不足时被 OOM Killer(Out-Of-Memory Killer)选中进行杀死的优先级的。值越低,表示进程越容易被杀死。将值设置为 -17 可以使进程避免被 OOM Killer 选中,除非所有其他进程都已经设定了更低的 oom_adj 值。

    从你提供的信息来看,ChaosBlade 在尝试调整目标进程的 oom_adj 值时遇到了问题,报错说找不到文件或目录。这可能是因为:

    1. 操作系统版本不支持 /proc/PID/oom_adj 文件。一些较新的内核版本可能会使用 /proc/PID/oom_score_adj 而不是 oom_adj。你可以检查一下你的内核是否支持。
    2. 权限问题。如果你没有足够的权限来修改这个文件,操作将会失败。确保 ChaosBlade 或执行它的用户有足够的权限来访问和修改这个文件。
    3. 目标 pod 的环境配置。某些容器运行时环境可能会限制对 /proc 文件系统的访问,或者提供不同的机制来管理进程的内存压力。

    关于你在代码内部执行流程的问题,ChaosBlade 是否会直接执行 echo -17 > /proc/52/oom_adj 类似的命令取决于它的实现方式。通常来说,这样的工具会通过 API 或者调用系统库函数来实现这些功能,而不是直接执行 shell 命令。

    为了确认问题的原因,我建议你采取以下步骤:

    1. 检查你的操作系统版本以及它所支持的 OOM 控制机制。
    2. 确认你是否有足够的权限来修改 /proc/PID/oom_adj 文件。
    2023-12-13 10:02:33
    赞同 1 展开评论 打赏
问答分类:
问答地址:

为企业提供高效、稳定、易扩展的中间件产品。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载