“僵尸用户”是浮动许可管理中最隐蔽的成本黑洞。他们可能早就下班了,或者软件开着但人已经去开会了,但许可证还牢牢占着。
要找出这些人,不能靠猜,得靠数据。FlexNet 的日志就是最直接的证据。下面说清楚怎么看、怎么查。
FlexNet 主要产生两种日志,作用完全不同。
Debug Log(调试日志) :这是 lmgrd 和 vendor daemon 的运行日志,记录了服务启动、停止、报错等事件。它不记录谁用了多久,只在服务出问题时才有用。
Report Log(报告日志) :这才是我们要找的东西。它在 VENDOR 行通过 REPORTLOG 参数启用,记录了每一次许可证的签出(CHECKOUT)、签入(CHECKIN)、拒绝(DENIED) 等详细事件。每一行就是一条记录。
text
# 一次完整的签出记录大概长这样
11:23:45 (snpslmd) CHECKOUT 1 CAD_Design user1 192.168.1.10 (handle: 1234)
17:05:12 (snpslmd) CHECKIN 1 CAD_Design user1 192.168.1.10 (handle: 1234)有这个文件,我们才能算出来谁用了多久。
维度一:看“占着不用”的会话
这是最典型的僵尸用户——许可证签出来了,但实际没有在工作。用 lmstat 就能看到当前所有在用的会话。
text
lmutil lmstat -a -c /path/to/license.lic输出里会列出每个会话的 start 时间(什么时候签出来的)。如果某个会话已经占了好几个小时,而且你记得这个人今天压根没来,或者早上去开会了——这就是一个僵尸会话。

但这种一次性查看只能看到“当下”。要找出长期的僵尸用户,必须看 Report Log。
维度二:拉取 Report Log,计算真实使用时长
这是核心方法。把 Report Log 拉出来,按用户和 feature 分组,计算每次签出到签入的时长。那些签出时间长但操作极少(或者根本没有操作记录)的会话,就是僵尸。
手动排查的步骤大概是这样:
维度三:用工具自动分析(省力)
手撸脚本分析几十万条日志,不现实。市面上有一些现成的工具:
有工具帮忙,直接导出报表,谁占了多少小时、谁在非工作时间占用,一目了然。
找到僵尸用户之后,通常有几种处理方式:
1. 手动释放(临时方案)
用 lmremove 强制回收:
text
lmutil lmremove -h feature_name 用户名 主机名 handle值2. 配置 TIMEOUT 自动回收(根本方案)
在 options 文件里设置闲置超时:
text
TIMEOUTALL 900900 秒(15 分钟)是行业通用的起点。低于 900 秒可能误伤正常思考的用户。
3. 定期审计,建立制度
每个月跑一次 Report Log 分析,把占用率最低或者占用时间最长的 Top 10 用户拉出来,看看是正常使用还是僵尸。形成制度之后,僵尸会越来越少。
仿真计算、渲染、大型装配的 Regenerate——这些任务可能一跑就是几个小时,界面没有任何操作,但许可证确实在被使用。

排查的时候注意区分:
建议先跑两周的“审计模式”——只记录不回收,把数据拉出来看看,哪些是真正的僵尸,哪些是正常的长期任务。有了数据再动手,不会误伤。
找僵尸用户,靠的是 Report Log,不是 Debug Log。
| 方法 | 工具/命令 | 能发现什么 |
|---|---|---|
| 实时查看 | lmstat -a | 当前谁在占用、占用了多久 |
| 日志分析 | 解析 Report Log | 历史占用时长、非工作时间占用、长期僵尸 |
| 自动化工具 | FlexNet Manager / 第三方工具 | 报表化展示,省去手动分析 |
一句建议:先把 Report Log 开起来,跑一个月,导出数据看看。 你会发现有些许可证被同一个人占了几百个小时,但这个人可能只在上班时间出现过几次。数据摆出来,该回收的回收,该配 TIMEOUT 的配 TIMEOUT,许可证利用率自然就上去了。