工程师早上一启动 Catia,“All licenses are currently in use”。工单飞过来,老板抄送采购:“赶紧买十个!”——先等等。这句报错翻译过来是“此刻没抢到”,至于为什么没抢到,容量不足只占其中一小半。网络抖了、daemon 挂了、模块配错了、僵尸会话占着茅坑,弹出来的都是同一句话。
不把根因拆开就掏钱,是许可管理里最冤的一种花法。
浮动许可的逻辑就三步:客户端向 port@host 发 checkout 请求 → vendor daemon(ansyslmd、cdslmd 这些)在 feature 池里找空位 → 找到就发句柄,找不到就回错误码。弹窗文案是给用户看的,错误码才是给你看的。所以排查第一步永远是拿错误码,不是看弹窗。
常见几类,FlexNet 为例:
SolidWorks 的 SNL 报错 “-8, -97” 也是同款逻辑。“满”和“瘫”在用户眼里长一样,在日志里是两码事。
第一,把报错钉死。 谁、哪台机器、什么时间、哪个模块、错误码多少。缺一样,后面全靠猜。做一张排查登记表,别让用户截个图就完事。
第二,看服务器状态和日志。
lmutil lmstat -a -c 27000@lic-server 一把梭:lmgrd 活没活、vendor daemon 起没起、各 feature 占用多少、谁占的、从几点占的,全在这一屏里。第三,三个数放一起看:峰值并发、拒绝次数、空闲会话占比。峰值没满但拒绝一堆 → 服务或配置问题;峰值满了且空闲超 30 分钟的会话一大片 → 假性短缺;峰值真满、拒绝集中在固定时段 → 这才轮到容量话题。
核查结果压成四栏:事实、缺口、影响、责任人。拿这张表去开会,比甩一句“服务器满了”有说服力得多。

四个数都能下钻到具体账号、设备、模块,才算数。指标异常先查口径变了没,再怀疑业务。
苏州一家做精密模架的,Creo 30 席,一个季度里“许可不足”工单 40 多张,老板批了加购 10 席的预算,还没走完流程。新来的运维主管接手,先按错误码分流:40 张工单里,-15(连不上)12 张——全部来自新装修的二号楼,防火墙策略变更后 27000 端口出方向没放行;-4(真满)14 张,且集中在周一下午;剩下的是配置错 feature 名的一次性事故。
处理:防火墙策略当天修复,12 张工单的根因直接清零;debug.log 里 grep 周一下午的 DENIED,发现 6 个会话单次占用超 6 小时且无操作——设了 20 分钟双因子闲置回收,跑 solver 的机器加白名单;周一下午是周例会后的建模高峰,跟各部门约好错峰半小时开 Creo。
跑了一个月:-4 类拒绝从日均 5 次降到 0.3 次,空闲占用比例从 34% 压到 9%。加购预算冻结,最后只补了 2 席。老板原话:“早知道先把端口查了。”
这事就一句话——报错背后有四种病,药不一样。先诊断,再开方,最后才花钱买补品。顺序反了,病没好,钱没了。