许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  用户打开软件时报“No available licenses”的完整排查流程

用户打开软件时报“No available licenses”的完整排查流程

阅读数 4
点赞 0
article_banner

“No available licenses”是FlexNet运维中最常见的错误之一。用户点开软件,弹出一个窗口,告诉你没有可用的许可证。有时候是暂时的,关掉重开就好了;有时候持续几个小时,所有人都在等。

这篇文章提供一个完整的排查流程,按顺序走一遍,大多数情况都能找到原因。

一、先确认错误信息

用户报“No available licenses”时,实际上可能有几种不同的错误码和表现形式:

  • 错误码-4:Licensed number of users already reached。许可证数量已达上限,所有许可都被占用了。
  • 错误码-22:Feature checkin failure。签入失败,通常与vendor daemon有关。
  • FlexNet License Finder弹窗:软件找不到许可证服务器,让你手动输入服务器地址。
  • 软件卡住不动:启动后长时间停留在加载界面,最后超时报错。

不同的表现形式指向不同的问题。先看清楚用户遇到的是哪一种,再往下排查。

二、第一步:确认许可证池真的满了

这是最直接的排查方向。用lmstat查看当前许可证的使用情况。

在服务器上执行:

bash

lmutil lmstat -a -c /path/to/license.lic

或者从客户端远程查询:

bash

lmutil lmstat -a -c 27000@license-server

输出结果里重点关注几个部分:

1. Vendor daemon状态

text

Vendor daemon status (on license-server):
  snpslmd: UP

如果显示DOWN,说明vendor daemon没起来,所有许可证都不可用。这种情况需要去查debug.log,看vendor daemon为什么启动失败。

FlexNet License Finder弹窗

2. 每个feature的使用情况

text

Users of CAD_Design:  (Total of 50 licenses issued;  Total of 50 licenses in use)
  • Total of 50 licenses issued:总共买了多少个
  • Total of 50 licenses in use:当前用了多少个

如果in use等于issued,说明许可证池已经满了,所有许可都被占用了。这就是“No available licenses”的直接原因。

3. 具体谁在用

text

CAD_Design  (Total of 50 licenses issued;  Total of 50 licenses in use)
  user1  workstation1  (v2024) (license-server/27000 1010), start Mon 8/18 9:23
  user2  workstation2  (v2024) (license-server/27000 1011), start Mon 8/18 9:25
  ...

能看到每个许可证被谁占用、从哪台机器签出的、什么时候开始的。

解读结果:


lmstat输出含义下一步
in use < issued池子没满,还有空闲许可问题不在数量上,检查客户端能否找到服务器
in use = issued池子满了看下一步:谁在用、用了多久
vendor daemon状态DOWN服务本身有问题查debug.log,修复服务
看不到任何featurelicense文件没加载检查license文件路径和内容

三、第二步:判断是真满还是假满

如果池子满了(in use = issued),需要判断这些占用是真实的还是“假满”——即有人占着许可但并没有真正在使用。

判断方法:看占用时长和活动状态。

用lmstat能看到每个会话的start时间。如果某个用户早上9点就签出了许可,到了下午3点还在占用,而且你记得这个人今天请假了或者上午开完会就走了——这很可能是个僵尸会话。

更精确的方法是配合options文件的TIMEOUT机制来观察。如果没有配置自动回收,就需要手动排查。

常见导致假满的原因:

  • 用户退出软件时没有正常释放许可证(软件崩溃、强制结束进程)
  • 网络中断导致客户端无法向服务器发送checkin请求
  • 客户端机器休眠或待机,许可证会话还挂在服务器上
  • 用户开了多个实例,每个实例都占用一个许可

四、第三步:释放僵尸会话

如果确认有僵尸会话,用lmremove强制释放。

先获取会话信息:

bash

lmutil lmstat -a -c /path/to/license.lic

输出里找到要释放的那一行,记录feature名称、用户名、主机名和handle值。

执行释放:

bash

lmutil lmremove -h feature_name 用户名 主机名 handle值

具体格式因厂商而异。以Siemens的Simcenter Amesim为例:

bash

lmutil.exe lmremove -h <feature> <host> <port> <handle>

释放后验证:
再次执行lmstat -a,确认该feature的in use数量减少了一个。

注意: lmremove只能由许可证管理员执行,普通用户没有权限。而且如果用户还在使用软件,强制释放会导致对方立即失去许可,可能丢失未保存的工作。操作前最好先确认对方确实不在使用状态。

五、第四步:检查options文件是否限制了可用许可

如果池子里明明有空闲许可,但特定用户就是签不出来,问题可能出在options文件上。

options文件可以通过RESERVEEXCLUDEINCLUDE等指令控制许可证的分配。

检查方法:

找到options文件(在license文件的VENDOR行指定),查看是否有以下配置:

  • RESERVE:预留了特定数量的许可给特定用户或组。如果预留了5个给A组,其他人就只能用剩下的。
  • EXCLUDE:禁止特定用户使用某个feature。
  • INCLUDE:只允许特定用户使用某个feature。
  • MAX:限制某个用户或组最多能占用多少个许可。

如果用户正好在EXCLUDE列表里,或者他所在的组不在INCLUDE列表里,就会报“No available licenses”——即使池子里有空闲许可。

快速验证方法: 临时把options文件移走(记得备份),重启vendor daemon或执行lmreread,让用户再试一次。如果能签出来了,说明options文件的规则限制了他。

六、第五步:检查客户端是否真的连上了服务器

有时候用户报“No available licenses”,但实际上连许可证服务器都没找到。客户端把“找不到服务器”和“没有可用许可”当成同一个错误来处理了。

在客户端上检查:

bash

lmutil lmstat -a -c 27000@license-server

如果输出显示Cannot connect to license server-15错误,说明客户端根本没连上服务器。这种情况下报“No available licenses”是误导——真实原因是网络不通或配置错误,不是许可不够。

如果lmstat能连上服务器但显示in use = issued,那才是真正的池子满了。如果lmstat连不上,先去排查网络连接和客户端配置。

七、第六步:检查是否有排队的用户

如果池子满了,FlexNet允许后续请求排队等待。但排队是有超时时间的,超时后就会报“No available licenses”。

查看排队情况:

bash

lmutil lmstat -a -c /path/to/license.lic

输出中如果有Users are queued for this feature,说明有用户在排队。

LMTOOLS by Flexera

如果排队时间过长或排队用户过多,可以考虑:

  • 调整排队超时时间(通过FLEXLM_TIMEOUT环境变量)
  • 增加许可证数量(采购)
  • 通过回收机制释放闲置许可

八、第七步:检查license文件是否过期或feature名称不匹配

如果池子里明明有足够的空闲许可,但用户仍然报错,检查以下两点:

1. feature名称是否匹配

用户软件请求的feature名称必须与license文件中的FEATUREINCREMENT行完全一致。大小写敏感,不能有拼写错误。

lmstat -f feature_name确认该feature是否存在。如果返回No such feature exists,说明用户请求的feature名称与license文件中的不一致。

2. 许可证是否过期

查看lmstat -a输出中的过期日期。如果当前日期超过了expire_date,该feature不可用。

3. 版本是否匹配

用户软件版本高于license文件支持的版本时,也会报错。

九、排查流程图

text

用户报“No available licenses”
        ↓
用lmstat查看许可证池状态
        ↓
lmstat能连上服务器吗?
├── 不能 → 排查网络连接、客户端配置(参考第32篇)
└── 能   ↓
in use = issued(池子满了)?
├── 否 → 检查options文件(RESERVE/EXCLUDE/INCLUDE)
│       检查feature名称是否匹配
│       检查许可证是否过期
└── 是   ↓
查看具体谁在用、用了多久
        ↓
有僵尸会话(长时间占用无活动)?
├── 是 → 用lmremove强制释放
└── 否 → 池子确实满了,需要:
         ① 采购更多许可证
         ② 配置TIMEOUT自动回收闲置许可
         ③ 优化许可证分配策略

十、检查清单


检查项状态
lmstat -a查看许可证池状态
vendor daemon状态是否为UP
in use是否等于issued(池子满了)
查看具体占用用户和占用时长
检查是否有僵尸会话需要释放
检查options文件是否有RESERVE/EXCLUDE限制
检查用户请求的feature名称是否正确
检查许可证是否过期
从客户端lmstat确认能连上服务器

“No available licenses”有两种本质不同的情况:

第一种:池子真满了。 lmstat显示in use = issued,所有许可都被占了。解决方案是释放僵尸会话、配置自动回收、或者采购更多许可。

第二种:池子没满但用户拿不到。 lmstat显示还有空闲许可,但用户就是报错。问题出在options文件的限制、feature名称不匹配、或客户端根本没连上服务器。

排查时先用lmstat看清楚池子的真实状态——是真满还是假满,是池子问题还是配置问题——再对症下药。不要在没搞清楚状况之前就去重启服务器或者找厂商加许可,那只会让问题更复杂。


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空