You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CAS 7.0.0-RC9中Groovy脚本执行耗时过长问题排查求助

CAS 7.0.0-RC9 Groovy属性仓库15秒延迟排查与解决方案

核心原因分析

结合现象(无Groovy配置时流程流畅,启用后固定15秒延迟),大概率是以下两类问题:

1. Groovy脚本首次执行的类加载/编译阻塞

CAS 7.x对Groovy脚本执行引擎做了调整,首次运行时需要动态编译脚本、加载类,若JVM类路径扫描缓慢或未启用脚本缓存,会触发明显延迟;另外,Groovy默认的编译日志、依赖解析操作也可能拖慢速度。

2. 隐性的DNS/IO阻塞操作

15秒是典型的DNS查询超时时间,大概率是脚本中(或Groovy初始化过程中)存在隐性网络调用,比如:

  • 脚本调用了InetAddress.getLocalHost()、URL.openConnection()这类需要解析主机名的代码
  • 脚本依赖的类触发了网络相关的初始化逻辑

针对性解决方案

方案1:启用Groovy脚本缓存

在cas.properties中添加缓存配置,避免每次请求都重新编译脚本:

# 启用脚本缓存
cas.authn.attribute-repository.groovy.cache.enabled=true
# 设置缓存过期时间(按需调整,示例为1小时)
cas.authn.attribute-repository.groovy.cache.expiration=PT1H
# 缓存最大容量
cas.authn.attribute-repository.groovy.cache.max-size=100

方案2:排查并移除脚本中的阻塞代码

检查你的custom-attr.groovy,确保没有任何隐性网络/IO操作:

  • 删除所有涉及InetAddress、网络URL的代码
  • 避免在脚本中执行文件读取、非必要的系统属性查询
  • 简化脚本到最简逻辑,示例:
import org.apereo.cas.authentication.principal.Principal

def run(Object... args) {
    def principal = args[0] as Principal
    // 仅返回必要属性,无多余操作
    return [
        'user_id': principal.id,
        'role': 'USER'
    ]
}

方案3:优化JVM与Groovy编译参数

在CAS启动参数中添加以下配置,优化Groovy类加载与编译速度:

# 关闭Groovy编译日志,减少IO开销
-Dgroovy.compiler.verbosity=0
# 启用Groovy类加载缓存优化
-Dgroovy.use.classvalue=true
# 启用Groovy并行编译(按需调整)
-Dgroovy.compiler.parallel=true

方案4:预编译Groovy脚本(彻底解决编译延迟)

将.groovy脚本编译成.class文件,放到CAS的类路径下替换原脚本:

  1. 用Groovy编译器编译脚本:groovyc custom-attr.groovy
  2. 将生成的custom-attr.class放到CAS的类路径(如cas-server-webapp/src/main/resources/)
  3. 修改cas.properties中的脚本路径指向class文件:
cas.authn.attribute-repository.groovy.location=classpath:custom-attr.class

验证步骤

  1. 先排查脚本:注释所有非核心代码,仅返回固定属性,测试延迟是否消失
  2. 启用缓存后,首次请求可能仍有延迟,但后续请求应立即返回
  3. 开启DEBUG日志定位具体阻塞点:
    在CAS的log4j2配置中添加:
    <Logger name="org.apereo.cas.authentication.attribute" level="DEBUG"/>
    <Logger name="groovy.lang.GroovyClassLoader" level="DEBUG"/>
    
    从日志中查看是编译阶段还是执行阶段耗时。

内容的提问来源于stack exchange,提问作者artur mis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:34:54