"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 ?"
可以看一下是否有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开源讨论群"。
使用 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 值时遇到了问题,报错说找不到文件或目录。这可能是因为:
/proc/PID/oom_adj
文件。一些较新的内核版本可能会使用 /proc/PID/oom_score_adj
而不是 oom_adj
。你可以检查一下你的内核是否支持。/proc
文件系统的访问,或者提供不同的机制来管理进程的内存压力。关于你在代码内部执行流程的问题,ChaosBlade 是否会直接执行 echo -17 > /proc/52/oom_adj
类似的命令取决于它的实现方式。通常来说,这样的工具会通过 API 或者调用系统库函数来实现这些功能,而不是直接执行 shell 命令。
为了确认问题的原因,我建议你采取以下步骤:
/proc/PID/oom_adj
文件。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。