早上七点五十,设计部的李工已经在群里@我。CATIA打不开,报License not available。
我切到服务器看了一眼,28个许可,齐刷刷挂着。
再点开在线用户,一半是昨晚加班的人,电脑早就休眠了;还有三个IP是上周出差的,笔记本早关了。
没人偷许可,就是没人还。
这种事,我前两年一周能遇上三四回。老板问的是一句:“是不是许可买少了?”
我翻完日志只能回:“不是少,是死在里面了。”
先说清楚,这不是SolidWorks、CATIA或者ANSYS的bug,是浮动许可这套机制天生的盲区。
FlexNet、RLM、LUM这些授权系统,核心逻辑很简单:
你以为工程师只用一个CATIA?
实际上一启动,后台同时申请十几个feature:
MD2、ST1、GSD、FSS……
只要其中任意一个feature池子满了,整个CATIA就起不来。
问题是,有些人只用个草图,却把GSD(曲面)这种紧缺feature也顺手签走了。
他不用,别人也用不了。
Borrow功能本来是为出差准备的。
点一下“借用7天”,许可从服务器划走,直接绑死在本地MAC。
人回来了,项目结束了,电脑一关,谁还记得点“归还”?
我见过最离谱的一条记录:一个ANSYS_Mechanical许可,被借走127天,持有人离职了,许可才到期自动飘回来。

老板说“再加10个”,我一般拦住。
先干三件事:看日志、看行为、看配比。
在license服务器上,我习惯用最原始的办法:
lmutil lmstat -a -c 27000@localhost > /opt/logs/lic_$(date +%F).txt
一天跑24次,每小时一次,cron定时:*/60 * * * * /opt/flexnet/snapshot.sh
为什么要这么做?
因为“平均占用”会骗人。
你看到24小时平均用了20个,以为够。但早高峰9点到10点,32个全满,还有人排队。
只有把每个整点的快照拼起来,你才知道是“总量不够”,还是“分布不均”。
我一般会重点看两个字段:start time:什么时候拿的 hostname:哪台机器 这一步很多人跳过,但最有价值。
我会把feature拆开,单独统计:
哪些是“高频刚需”(草图、零件、装配),哪些是“偶尔用一下”(渲染、高级求解、流体)。
拿CATIA举例,我做过一次统计(2026年3月,某主机厂,186个用户):
| feature | 总数量 | 日均最大并发 | 闲置>30分钟占比 |
|---|---|---|---|
| MD2 | 28 | 27 | 4% |
| GSD | 12 | 11 | 38% |
| FSS | 8 | 3 | 62% |
| ST1 | 28 | 18 | 21% 一眼就能看出来: |
MD2是真的紧,得保; FSS(创成式曲面高级版)八成时间在睡觉。 这里开始动配置,每一步都踩过坑。

Linux默认TCP keepalive太佛系。我直接改:
# /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 3
重载:sysctl -p
原理很简单:
60秒开始探活,连探3次失败,连接断开,lmgrd就会释放许可。
原来半小时才能回收的坑,现在3分钟以内就能腾出来。
【注意】
Windows客户端这边,也要同步改。
注册表路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
加两个DWORD:KeepAliveTime = 60000 KeepAliveInterval = 1000 回到license文件,我给那些“高级但低频”的feature单独设TIMEOUT:
TIMEOUT FSS 600
TIMEOUT FSS2 600
意思是:这俩feature,只要客户端600秒没动静,就尝试收回。
为什么只限高级feature?
因为普通建模feature,工程师一直在鼠标操作,不会被误杀;
而曲面、渲染、仿真这些,一算起来CPU很高,也不会被判定“闲置”。
真正被回收的,是那些“开了功能菜单,点了两下,忘了关”的人。我把默认BORROW天数从7天改成1天,甚至按组区分:
GROUP core_users
GROUP field_users
BORROW 24 GSD USERGROUP field_users
BORROW 0 GSD USERGROUP core_users
现场办公的,不允许借;出差的,最多借一天。
第二天凌晨1点,再跑一次清理:lmutil lmremove -c 27000@localhost -f GSD -h all
【踩坑经验】
别一上来就BORROW 0全员。
我干过一次,第二天现场工程师去客户那儿演示,没网,打不开软件,被骂惨。
后来改成:默认不借,申请借的单独加,白名单制。以前,许可池满了,新请求直接失败,用户点三下,全报timeout。
我在关键feature上加了QUEUESIZE:
FEATURE GSD flexnet 2024.12 31-dec-2026 12 QUEUESIZE=5
允许最多5个人排队。
配合客户端环境变量:set FLEXLM_TIMEOUT=12000000
拉长到12秒,够排队,不急躁。
用户现在看到的是:“正在等待许可,前面还有2人”。
至少知道不是坏了。命令行运维,IT自己清楚,业务侧全是黑盒。
后来我在服务器侧加了一个轻量监控,叫格发许可优化器,只读lmstat,不改任何授权逻辑。
它帮我做了三件小事:
谁占着坑一目了然 点开一个feature,能看到:用户名、IP、机器名、签出时间、是否断线。 以前我要grep半天,现在一页看清。 闲置提醒,而不是硬踢 工具检测到某会话鼠标键盘30分钟没动,先给工程师弹窗: “许可即将回收,请确认是否还在使用?” 点了“继续”,保留;不理,5分钟后自动lmremove。 
同一套环境,没加任何新许可:
| 指标 | 优化前 | 优化后 |
|---|---|---|
| 早高峰检出失败率 | 22% | 1.8% |
| 许可平均闲置占比 | 41% | 9% |
| 人均日等待时间 | 14分钟 | 2分钟 |
| 出差场景演示失败 | 4次/月 | 0 最直观的感受是: 以前周一早上我手机不敢静音,现在一上午没人找。 |
1. 别迷信“自动回收”
TIMEOUT不是万能。有些软件(比如老版本Abaqus)vendor daemon不认,设了也白设。
我现在的做法是:vendor不认的,就靠每天凌晨lmremove硬清,简单粗暴,反而稳。
2. 外包账号要单独隔离
外包人员流动性大,电脑一还,许可就丢。
我现在给外包单独建feature池,数量卡死,用满就排队,绝不挤正式员工。
3. 别把“节约”做成“刁难”
有次我把TIMEOUT设成180秒,结果审图同事切个屏幕去查邮件,回来软件弹“许可丢失”。
后来改成:
许可优化,说到底不是IT的事,是管理的事。
以前,公司买软件,是买“使用权”;
现在,我更愿意把它理解成买“算力时间”。
每一份许可,都是按小时算钱的资产。
精益化管理,就是把“占着茅坑不拉屎”变成“谁用谁拿,用完就还”。
不需要天天盯着,只要机制对,许可自己会流动。
如果你现在也头疼“许可永远不够用”,先别急着找采购走流程。
今晚回去,先跑一次lmstat,把start time早于昨天的都拎出来看看。
你会发现,至少三成许可,不是不够,是没回来。