SpyGlass license 获取失败怎么办:Unable to checkout 排错速查
更新时间:2026-10-22。FAQ 速查页,属于 EDA 工具排错系列,总入口见 开源 EDA 报错排错中心。SpyGlass 启动
spyglass/sg_shell以及执行 lint、CDC、RDC 各 goal 时,第一件事是向 Synopsys 的授权服务器签到(checkout),签到失败工具直接退出或停在 goal 入口。SpyGlass 用的授权体系叫 SCL(Synopsys Common Licensing),底层是 FlexNet Publisher 的 lmgrd + vendor daemon 架构,vendor daemon 是 Synopsys 共用的snpslmd——同一组 SCL 守护进程往往同时给 VCS、Design Compiler、SpyGlass 发席位,动它影响的不只是 SpyGlass。客户端优先读的变量是SNPSLMD_LICENSE_FILE,通用LM_LICENSE_FILE只作兜底。Mentor 侧的同款问题可对照 Calibre license 获取失败速查,两篇共享 FlexNet 错误码语义,本篇聚焦 SCL/Synopsys 侧。
本文要回答的问题
- SpyGlass 报
Unable to checkout a license/ FlexNet-15,先查哪里? SNPSLMD_LICENSE_FILE和LM_LICENSE_FILE都设了,SpyGlass 到底听谁的?- lint 能起、切到 CDC goal 却报
SG_CDC取不到,feature 名怎么对? - 报
Licensed number of users already reached或进入排队,席位被谁占了,怎么回收? - 传统 SpyGlass 与 SpyGlass-X 的授权有什么不同,为什么换版本后全员签不到?
一、报错原文与典型现象
SpyGlass 的 license 报错出现在启动 banner 与 spyglass.log 最前面,或在切换 goal 时冒出来。以下为典型形态,服务器与端口均已占位:
1. 连不上 license server(启动即死,最常见):
Warning: Unable to checkout a license for feature 'SG_LINT'.
SNPSLMD: Cannot connect to license server system.
License path: 27000@<server>
FlexNet Licensing error: -15,570. System Error: 115 "Operation now in progress"
Error: License check failed. Exiting SpyGlass.2. 启动过了,跑到具体 goal 才签不到对应 feature:
## Info: Licensed feature(s): SG_LINT
## Error: Unable to checkout license for feature 'SG_CDC'
## while running goal cdc/clock_reset_integrity
## No such feature exists. FlexNet Licensing error: -5,3573. 席位占满,被拒或进入排队:
SNPSLMD: Licensed number of users already reached.
Feature: SG_LINT Total of 4 licenses issued, all in use.
FlexNet Licensing error: -4,1324. license key 无效或守护进程异常:
SNPSLMD: Invalid license key (inconsistent authentication code)
FlexNet Licensing error: -8,523snpslmd: The vendor daemon is down or not responding.
(-97,121)一句话根因:SpyGlass 本身没坏,是客户端到 SCL license server 这条链路某一环断了。 先抓报错里的负数错误码:-15/-96/-97 是连不上(变量指错、lmgrd 或 snpslmd 没起、防火墙拦 27000 端口),-5/-21/-10 是连上了但 feature 不存在、版本太新或 license 过期,-4 与排队提示是 feature 没问题但席位被占满,-8 多半是 license 文件本身损坏或被改过。
二、报错 → 原因 → 处置速查表
| 报错现象 | 最常见原因 | 一条命令确认 | 处置 |
|---|---|---|---|
-15 cannot connect | SNPSLMD_LICENSE_FILE 主机或端口写错 | echo $SNPSLMD_LICENSE_FILE | 改为 27000@<server>(端口以管理员通知为准)后重跑 |
-15 且变量看着对 | lmgrd 或 snpslmd 没在跑 | lmstat -a -c 27000@<server> | 联系管理员重启 SCL,注意同机 VCS/DC 共用 |
-15,lmstat 偶尔通 | 防火墙拦了 snpslmd 的 vendor 端口 | nc -vz <server> 27000,再测 vendor 口 | license 文件钉死 vendor 端口,两个口一起放行 |
-96/-97 vendor daemon down | snpslmd 崩溃,或 SCL 版本旧于客户端 | lmstat -a -c ... 看 daemon 状态行 | 管理员查 SCL 日志并重启,必要时升 SCL |
-5 No such feature | feature 名不对,或没买该套餐 | lmstat -f SG_CDC -c ... | 以本单位 INCREMENT 行的名字为准,不用习惯名猜 |
-21 version not supported | SpyGlass 版本新于 license 支持期 | 对照 INCREMENT 行版本日期 | 回退版本或申请新的 increment 后再升级 |
-10 expired | license 到期未续 | lmstat -i SG_LINT -c ... 看到期日 | 走续期,管理员 lmreread 重读 |
-8 Invalid license key | license 文件损坏、被编辑或 hostid 不符 | 核对文件校验与 SERVER 行 hostid | 用原厂原文文件重发,勿手工改 |
-4 / 排队提示 | 席位占满,含崩溃残留的僵尸占用 | lmstat -a -c ... | grep SG_ | 排队等释放,或管理员 lmremove 回收 |
| lint 能过、CDC goal 失败 | 只签出了 SG_LINT,SG_CDC/RDC 是独立 feature | lmstat -a 看各 SG_ feature 计数 | 确认 CDC/RDC 套餐授权到位再切 goal |
| 交互能跑、回归脚本签不到 | 非交互 shell 没 source SCL 环境 | 作业里 env | grep -i LICENSE | 变量写进工程环境脚本,不依赖个人 .bashrc |
三、排查决策树
按「变量 → 服务 → 端口 → feature 与席位」四环收敛,错误码直接替你选路:连不上的走前三环,连得上但拿不到的走第四环。
读这张图抓住一条主线:红色是报错现象,四个蓝色判定对应「知不知道去哪找、服务器活没活、网络通不通、要的货在不在」,橙色是统一修复动作,绿色是收敛复验。前三环解决「路不通」,第四环解决「路通了货不对」。任何一步命中就在那一层修,修完直接回到绿色节点复验,不要同时改三处。
四、逐条排查展开
第一步:确认变量在「启动 spyglass 的那个 shell」里真的有值。 SpyGlass 查找 license 的优先级是 SNPSLMD_LICENSE_FILE → LM_LICENSE_FILE,值可以是 27000@<server> 形式的浮动 license,也可以是 license 文件绝对路径。最常见的事故是管理员迁移了服务器,通用变量改了、SNPSLMD_LICENSE_FILE 还指着旧机器,而私有变量优先,于是白改:
env | grep -iE "SNPSLMD|LM_LICENSE"
# SNPSLMD_LICENSE_FILE=27000@<server> ← 与管理员通知逐字符对交互终端有值、LSF/cron/回归脚本里没有,几乎都是非交互 shell 不加载 .bashrc。把变量写进工程自己的环境脚本,作业开头显式 source。
第二步:用 lmstat 看「双 UP」。 SCL 安装目录($SCL_HOME/linux64/bin 一类位置)自带 lmstat:
lmstat -a -c 27000@<server>
# 健康输出的两行关键状态:
# <server>: license server UP (MASTER) v11.16
# snpslmd: UP v11.16lmgrd UP 与 snpslmd UP 缺一不可:只有 lmgrd 活着、snpslmd 没起来时,握手能开始但取 feature 必败。管理员换 license 文件后要执行 lmreread -c 27000@<server> 让 daemon 重读,只换文件不重读,新 feature 不生效。重启 SCL 前必须打招呼:snpslmd 是 Synopsys 全系列共用的 vendor daemon,同一组守护进程可能正在给 VCS 回归和 DC 综合发席位,lmdown 会把别人一起踢掉。
第三步:测端口,别只测 27000。 FlexNet 通信用两个端口:license 文件 SERVER 行上的固定端口(Synopsys 站点常用 27000,以实际文件为准)和 snpslmd 的 vendor 端口,后者默认每次启动随机分配。防火墙只放了固定口时,现象很有迷惑性:lmstat 偶尔能应答,真 checkout 时超时报 -15:
nc -vz <server> 27000
lmstat -a -c 27000@<server> | grep -i "port" # 找 snpslmd 实际口再 nc 一次根治办法是让管理员在 license 文件写 VENDOR snpslmd port=<固定口> 钉死,两个端口一起放行。三机冗余(triad)站点变量形如 27000@host1:27000@host2:27000@host3,多数存活即可签到,逐个 nc 测。
第四步:-5/-21/-10/-8——连上了但货不对。 四种成因分开看。-5 是 feature 名不存在:传统 SpyGlass 按能力拆成 SG_LINT、SG_CDC、SG_RDC 等独立 feature,启动时只签 lint,切到 CDC goal 才签 SG_CDC,所以「lint 能跑、CDC 报 -5」往往不是故障而是没买该套餐;SpyGlass-X 走 Policy 管理的授权,feature 命名与套餐划分和传统 SpyGlass 不同,一律以本单位 license 文件的 INCREMENT 行为准,用 lmstat -f <feature> 核实,不凭习惯名猜。-21 是版本不支持:INCREMENT 行版本日期表示「支持该日期之前发布的工具」,装了更新的 SpyGlass 就被拒,且服务端 SCL 本身也不能旧于客户端要求的下限,升级工具前先确认两边都到位。-10 是到期,lmstat -i SG_LINT 直接看到期日,续期文件到位后 lmreread。-8 Invalid license key 说明文件本身有问题:传输损坏、被 Windows 换行符污染、手工改过、或 SERVER 行 hostid 与机器不符,处置是让管理员用原厂原文重发,不要手工编辑修复。
第五步:-4 与排队——席位满员。 lmstat -a 能看到每个席位被谁、从哪台机器、从几点占用。两种处置:排队等释放(部分站点用 LICENSE_QUEUE 一类设置让工具在席位空出后自动重试,是否开启与变量名以管理员通知为准),或请管理员用 lmremove 清掉异常退出残留的僵尸会话——被 kill -9 的 spyglass 进程在心跳超时前不会立刻还席位。凌晨回归大面积 -4 时,先看是不是同机 VCS/DC 把 snpslmd 总席位或同套餐额度吃光了,再决定排队还是错峰。
第六步:两级复验。 先空壳签到(起 spyglass/sg_shell 进工程即退,确认无 license 报错),再把 lint 与 CDC 两个 goal 各真跑一次——feature 是按 goal 分别签出的,启动能过不代表所有 goal 都能过。两级都绿才算闭环。
五、预防与纪律
- 变量进工程脚本:
SNPSLMD_LICENSE_FILE写进团队统一 setup,回归作业开头 source 并打印一行确认,不靠个人.bashrc。 - 升级先核授权:SpyGlass 大版本升级或从传统版切到 SpyGlass-X 前,用 INCREMENT 行版本日期对安装包发布日期,并确认 SCL 版本满足下限,license 没到位不全网推送。
- vendor 端口钉死:新装机或迁移服务器时直接写
VENDOR snpslmd port=<固定口>,防火墙一次放两个口。 - 动 SCL 先通报:重启、
lmreread、lmremove前在团队渠道问一句在跑的 VCS/DC/SpyGlass 作业,维护窗口操作。 - 续期看日历:记 license 到期日提前两周走续期,别让
-10出现在流片前夜;第一次失败的完整spyglass.log先存档,改一处重跑一次。
这一篇在知识体系里的位置
本篇是 EDA 排错速查簇的一员,总入口见 开源 EDA 报错排错中心。SpyGlass 侧的另一类高频启动故障对照 SpyGlass 模块/单元找不到速查,Mentor/FlexNet 侧的同款签到问题对照 Calibre license 获取失败速查,错误码表可互换使用。签到过去之后,Lint 规则与违例治理见 Lint 与 SpyGlass waiver 签核。
一句话总结
SpyGlass license 获取失败,本质是 SpyGlass 经 SCL(FlexNet 架构、vendor daemon 为 snpslmd、与 VCS/DC 共用守护进程、客户端优先读 SNPSLMD_LICENSE_FILE)签到失败:按错误码分流——-15/-96/-97 依次核对变量主机端口、lmstat -a 看 lmgrd 与 snpslmd 双 UP、nc 验固定口与 vendor 口;-5/-21/-10/-8/-4 分别对应 SG_LINT/SG_CDC 等 feature 名不符(SpyGlass-X 另走 Policy 授权,以 INCREMENT 行为准)、版本超出支持期、license 到期、key 文件损坏、席位占满排队,用 lmstat -f/-i 与占用列表定位,配合 lmreread 重读与 lmremove 回收僵尸席位;重启 SCL 前先通报同机其他 Synopsys 作业,修完以空壳签到加 lint、CDC 两 goal 各跑一次为验证标准。