早上九点半,你端着咖啡路过研发区,看见老李的屏幕上CATIA开着,人不在工位。你打开许可管理器,那个被老李签出的ANSYS Mechanical许可已经挂了四个小时。走廊另一头,小王刷新了第八遍排队列表,嘴里在骂娘。你心里清楚,老李多半是昨天跑完仿真忘了关,或者干脆就是“先占着,省得下午抢不到”。你打开采购发来的续费报价,手有点抖。加许可?加个屁。你库里的闲置许可正在给别人当占位符用,你却要掏钱买新的。
问题的根子不在“不够”,在于你根本分不清谁在用、谁在挂。FlexNet原生的TIMEOUT机制,判断“闲置”的依据是客户端到许可证服务器的TCP心跳还连不连着,跟你的键盘鼠标有没有动、人还在不在工位,一毛钱关系没有。你打开UG NX,最小化,去开一个四十分钟的会,心跳包照发,FlexNet就认为这个会话“活跃”。默认超时?大部分厂商是120分钟,也就是两个小时之后服务器才可能把许可收回去。你嫌它太长,设成30分钟试试——设计师盯着屏幕想结构方案,手离开鼠标超过半小时,许可被踢了,回来发现模型没保存,他能堵在你工位骂一下午。
这就是最操蛋的地方:原生TIMEOUT只能收“网络断开”的许可,收不了“人走了但软件还开着”的许可。真闲置是什么?键鼠没输入,窗口在后台,没有批处理在跑,没有仿真求解在算,签出时长远远超过这个岗位正常单次使用的周期。假闲置又是什么?设计师停下手想方案,软件在后台跑大型装配的Regenerate,弹窗“另存为”占了焦点,你按“没键鼠动作”一刀切下去,砍的全是正在干活的人。
我见过一家油田设计院,22个人抢8个浮动许可,每天的“有效工作占用时长”只有3.2个小时。剩下的是什么?午休挂机,开会占坑,提前两小时把许可攥在手里怕下午抢不着。八份许可的钱,产出不到三份的效率。你问他们为什么不收紧回收阈值?管理员的原话是:“收错了挨骂,不如不收。”于是阈值设在60分钟,挂机的人安然无恙,排队的人继续排队。
所以别一上来就想“回收”。先干一件最土的事:把数据拉出来看。在FlexNet服务器上跑lmstat -a -c,把已发放许可的用户名、工位IP、最后操作时间、关联进程的CPU占用率导出来,连续采七天。你会看到有人签出许可之后进程CPU一直是0,有人窗口最小化了六个小时,有人同一台机器上挂着两个会话。没有这份底数,你设的任何回收阈值都是拍脑袋。
真正落地的时候,阈值不能拍一个数字了事。ANSYS这种求解时间动辄几十分钟的,TIMEOUT给到7200秒(2小时)不算多;通用工具的TIMEOUTALL放到10800秒(3小时),是为了兜住那些真正在跑后台计算的场景。但你别把阈值压到3600秒以下——有企业试过,工程师暂停仿真去开个短会,回来许可没了,投诉直接捅到IT总监那里。更好的做法是分层:第一轮只提醒,不回收,在用户屏幕弹窗告诉他“您的许可已空闲XX分钟,如无需使用将被收回”;跑一两个月,攒够了误判样本,再开灰度回收。关键岗位和关键任务类型挂白名单,回收之前给一个明确的倒计时,回收之后用户一动鼠标,后台自动把许可抢回来,会话恢复到原来的状态。用户感知不到“被踢”,你才敢把阈值往下降。

盯指标的时候别只看“回收了多少个”。回收许可数漂亮得一塌糊涂,同时等待时长没降,说明你收上来的许可根本没流转到排队的人手里,可能是被别的挂机会话又抢走了。重新申请率和误回收率要保留下钻明细,一个用户被收了之后三分钟内重新申请,八成是误杀;一个用户被收了一整天没回来,那才是真闲置。这几个数同时落在可接受区间,才算跑通了。
最后说个真事。武汉一家汽车研发企业,CATIA和ANSYS的浮动池在上午九点到十一点半准时爆满,新员工排队最长等过47分钟,晚上下班后池子里32%到45%的授权处于“登录但软件最小化挂起”的状态。管理员一开始想手动收,逐台核对在线用户,单次操作两个多小时,还误收过一个正在跑仿真的会话,把人家没保存的工程文件干没了。后来他们没急着上自动回收,先跑了七天lmstat采集,发现有一个工位连续三天签着同一个ANSYS求解器许可,进程CPU占用全程为零。找过去一问,那位工程师上周五跑完任务忘了关,软件就那么开着过了个周末。就这一个会话,卡住了整个部门周一上午的排队。他们把采集脚本挂成每五分钟跑一次,攒足数据之后,给ANSYS设了7200秒的TIMEOUT,通用工具设了10800秒,同时上了“先弹窗提醒、用户不响应再回收、回收后自动抢回”的灰度流程。第一个月回收了四十多次,重新申请率不到百分之六,误回收两次,都是VPN闪断导致的心跳丢失,不是真把干活的人踢了。排队时长从峰值47分钟压到了十一分钟,采购单没签。