Skip to content

ContainerCacheGuard v0.2.0-rc.10

Pre-release
Pre-release

Choose a tag to compare

@cuipengdba cuipengdba released this 10 Nov 08:06

v0.2.0-rc.10:每日有界日志与保护输入检查

候选版,最终原生测试及发布结果以本版发行附件为准。本轮不修改171,不把功能测试视为真实业务48小时验收。

每天一个日志文件

run默认同时输出控制台和每日JSON行文件。最多30个日历日、受管总量1GB,先删最旧历史;当天独自触顶时原地截断旧内容并记录清理事件。新增可配置目录、天数、总量和时区;静态程序内置时区数据。重启追加同一天文件,维护只扫描专用目录,有条目上限,不压缩或复制大日志。文件权限0600、目录0700,拒绝符号链接、硬链接、FIFO和多写进程。日志目录自动排除缓存治理。

正常运行每分钟检查保留期,写入前检查容量;日志失败停止CCG并错误退出。控制台被运行时另存的日志不由此1GB策略删除。文件名时区与原始状态时间偏移的说明、四实例挂载示例及清理可见性见日志手册。

缺失保护数据时暂停

新增protection状态和固定标签指标。enforce所需的内存分类、自身预算及已启用的IO/PSI/refault等保护输入缺失时暂停新回收,不把默认零解释为健康。可继续观察已知内存,监控就绪不等于保护齐全或允许回收。采样空窗、计数回退和范围变化使差分重新建基线;严格解析IO及PSI。业务p99保护需显式信号路径。

先用回归复现了旧版对11类缺项仍Allow=true的代码行为,再实施修复;不能据此认定该缺陷造成此前现场驱逐。IO/CPU/refault速率遇到超过3倍周期的空窗,重新建基线。首次可用OOM计数建立基线,不把此前历史计数误认为新事件。

采样、状态和日志IO前先撤销旧许可,成功返回后只有仍新鲜的允许决策才能重新授权;失去关键保护时也不分派新的enforce扫描任务。不新增cgroup修改、全机清缓存或业务进程接管。

升级注意

旧配置加载时得到日志默认值,因此需要可写的状态/日志挂载。默认启用的IO PSI在缺失环境会使enforce暂停;显式设置0才表示接受禁用。v1的OOM计数限制单独报告。回退需保留旧程序及旧配置;旧版不识别新增字段,不能直接读取加入这些字段的新配置。数据库无需随CCG重启。

验证范围

原生双架构race、CLI和网页回归覆盖30天边界、时区跨日、重启追加、1GB稀疏文件大小边界、当天截断、危险文件、写失败、保护缺项、速率空窗及恢复。稀疏文件不代表实际写入1GB,也不是日志IO性能验收。完整日志、数量、静态ELF和构建提交核验附于发布。

参考:内核cgroup接口、PSI接口。缺项暂停是CCG的保守策略选择,不是内核自动替CCG实施的行为。

首轮原生CI 42776612907的单元测试通过,但CLI新增夹具被真实cgroup文件系统校验拒绝,导致集成测试未完成。保持生产校验不变,改由原生单元测试内部注入读数驱动实际daemon/文件建议;CLI另外验证伪造目录继续被拒绝。此失败不计为完整通过,最终结果以修正后CI为准。

第二轮CI 42777396486中amd64实际daemon故障注入测试触发了默认RSS保护:race测试进程约134MiB,超过128MiB产品默认值,恢复被正确阻止。该测试单独采用512MiB仪器化预算并保留失败诊断;产品默认RSS和自身预算回归不放宽。两轮都不计为完整成功。

本次实际回归结果

源码提交:fc0455a450c85d8b1bccd312aaee2198af3763d5。已下载核对原生CI 42778598596原始日志与构建产物。

架构 原生race顶层单测 CLI检查 网页检查 页大小 静态ELF
amd64 58通过,0跳过 18通过 14通过 4096 B 无INTERP/DYNAMIC段
arm64 58通过,0跳过 18通过 14通过 4096 B 无INTERP/DYNAMIC段
架构 固定快照编码ns/op B/op allocs/op 次数
amd64 32734.0 17973 366 1000
arm64 29065.0 17973 366 1000

该微基准只测内存快照编码,不包含HTTP传输、认证、目录扫描或实际业务,不能据此认定整个守护进程成本或生产SLO通过。

产物直接取自本次原生CI,构建提交与源码标签一致,源码构建标记干净。附件含程序、SHA256、中文说明、LICENSE和机器可读测试JSON。本版本没有在171修改配置,也没有替换94运行实例;真实业务48小时和ARM64 64KiB页验收仍未完成。