Skip to content

流式读取游戏崩溃日志,加快日志分析速度 - #6661

Draft
Hylfrd wants to merge 3 commits into
HMCL-dev:mainfrom
Hylfrd:fix/game-crash-log-oom
Draft

流式读取游戏崩溃日志,加快日志分析速度#6661
Hylfrd wants to merge 3 commits into
HMCL-dev:mainfrom
Hylfrd:fix/game-crash-log-oom

Conversation

@Hylfrd

@Hylfrd Hylfrd commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Fix #6640

游戏异常退出后,HMCL 会读取并分析日志。原实现会将完整日志转换成 String 后一次性读取到内存中;当日志过大时,HMCL 可能在崩溃分析过程中发生 OOM。大量日志还会增加日志分析的时间,使崩溃窗口长时间无法得到分析结果。

此 PR 重构了 CrashReportAnalyzer 的日志分析流程:

  • 使用固定大小的重叠窗口流式读取日志,避免在内存中保留完整日志,并支持跨窗口匹配。
  • 为崩溃规则添加 Trigger ,先统一扫描候选规则,再执行对应的完整正则,避免对大日志反复运行全部正则。
  • 流式读取游戏崩溃日志。

使用 608 MiB 日志进行测试时,修改后的分析可在 -Xmx256m 下约 8.7 秒完成。若对每个窗口直接运行全部规则,则需要约 161 秒。

注:

1:补充了新的单元测试:

  • streamingAnalysisFindsCrossWindowMatch 增加跨窗口匹配测试,确保错误特征横跨两个流式窗口时仍能被识别。
  • streamingAnalysisFindsCrashReportKeywords 增加流式关键词提取测试,确保新旧分析路径提取的模组关键词保持一致。

2:第一个单元测试与部分注释由AI完成。

@github-actions github-actions Bot added the 500+ label Aug 12, 2026
@Hylfrd
Hylfrd marked this pull request as draft August 12, 2026 12:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] 日志太大导致HMCL OOM

2 participants