[Prisma 云计算版] ECS Fargate 任务在处理大流量时以退出代码 255 终止
725
Created On 07/31/24 08:21 AM - Last Modified 02/19/26 16:54 PM
Symptom
- 您已在 ECS Fargate 任务上安装了防御者
- 这些被防守的任务,在处理较大的流量时,以代码255退出
- 部署类型相同但流量较低似乎不会报告相同的错误
- 即使没有防御者,任务也能顺利进行,即使流量很大
Environment
- Prisma 云计算版本
- AWS ECS Fargate
Cause
- 在大多数 Linux 系统中,最大命令行参数大小为 128kb 数据(取决于内存页面大小)。参考这里 - https://elixir.bootlin.com/linux/v4.15/source/include/uapi/linux/binfmts.h
- 当参数大于此大小时,防御者将无法读取参数字符串并中止执行(它无法在大小限制内找到 NULL 字符):
failed to fetch execve arguments: failed to read argument: failed to find string in <ArgString>
- 因此,这里的问题是参数命令行太长,达到了 128kb 的限制,并且防御者无法按照设计处理执行
- 由于防御者仅限于 128kb,并且无法在防御者中更改限制,因此任务失败
Resolution
- 这里一个可能的解决方法是通过另一个文件传递编码的 JSON,因此参数字符串可以是该 JSON 的文件路径,从而使其更短。
- 或者寻找另一种更短参数的解决方案。
- Defender 将进行修复,以消除此 128kb 的参数大小限制,因为现代 Linux 系统可以支持超过 2MB 的参数大小,如下所述:https://man7.org/linux/man-pages/man2/execve.2.html