PG PoolGuard
GitHub

Java Thread Pool Leak Scanner

让线程池泄露问题
在提交前暴露

PoolGuard 是一个面向 Java 项目的 CLI 扫描工具,聚焦线程池生命周期风险,支持规则检测、LLM 复判与多格式报告输出。

Java 8 兼容运行
PG001~PG009 核心规则
DashScope + LLM AI 复判闭环

AI 审核引擎

规则检测之后,再做一轮语义复判

误报收敛

通过代码上下文理解,降低规则误报,帮助团队优先处理真正高风险问题。

可控降级

当 AI 调用超时、限流或失败时,自动回退规则结果,保证扫描流程稳定。

并发可调

通过 `--llm-concurrency` 控制复判并发,平衡速度与配额成本。

模型可配

默认 `glm-5`,可通过 `--llm-model` 切换模型,匹配企业策略。

核心能力

为 CI 与本地扫描设计

全量 + 增量扫描

支持 `--changed-files`,只扫描变更与扩散影响文件,降低扫描成本。

AI 语义复判

可启用 DashScope 复判,失败自动降级规则结果,不阻断流程。

多格式报告

提供 JSON、Markdown、Text 三种输出,便于接入平台或直接阅读。

缓存机制

基于文件哈希缓存减少重复解析,提高迭代场景下执行效率。

规则覆盖

首期 P0 风险规则

PG001 高频入口方法内创建线程池 PG002 循环/递归重复创建线程池 PG003 未关闭或关闭路径不完整 PG005 生命周期不匹配 PG006 默认线程工厂不可观测 PG007 无界队列风险 PG008 定时线程池未取消且未关闭 PG009 静态线程池缺少退出钩子

执行路径

扫描流程

  1. 参数校验与扫描模式判定(全量 / 增量)
  2. Java 文件发现与源码解析,提取线程池事实模型
  3. 规则引擎执行 PG001~PG009
  4. 按需触发 LLM 复判并合并结果
  5. 按排序策略输出报告到 stdout 或文件

组件分层

架构概览

flowchart LR
    A[CLI
ScanCommand] --> B[ScanService] B --> C[JavaFileDiscoverer] B --> D[JavaSourceParser] B --> E[P0RuleEngine] B --> F[LlmReviewService] B --> G[ReportRendererFactory]

快速开始

本地两步运行

mvn clean package
java -cp target/classes:$(mvn -q -DincludeScope=runtime dependency:build-classpath -Dmdep.path | tail -n 1) \\
  cn.rqfreefly.Main scan --path . --format json