许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  远程桌面(RDP)环境下浮动许可的占用与回收问题

远程桌面(RDP)环境下浮动许可的占用与回收问题

阅读数 7
点赞 0
article_banner

远程桌面(RDP)环境下浮动许可的占用与回收,是FlexNet运维中一个容易被低估的问题。

表面上看,用户通过RDP登录到一台工作站,打开软件,用完关闭,跟本地操作没什么区别。但实际运维中,RDP环境下的许可证占用和回收,比本地环境复杂得多。

一、先说清楚:浮动许可在RDP下能不能用

能。但有个前提。

FlexNet区分两种许可证类型:

  • 节点锁定许可证(Node-Locked License) :绑定到单台机器,只能在那台机器上用
  • 浮动许可证(Floating License) :在网络中共享,多人轮流使用

节点锁定许可证默认不支持在Windows远程桌面或终端服务器环境下使用。FlexNet在授权验证阶段会调用Windows API来判断当前是否处于远程桌面环境,如果是远程会话,节点锁定许可证会直接拒绝。

要让节点锁定许可证在RDP下工作,需要在license文件的FEATURE行中添加TS_OK属性。TS_OK允许在Windows终端服务器远程客户端上签出节点锁定许可证。

但浮动许可证不一样。 浮动许可证天然支持在终端服务器环境下使用。原因在于:浮动许可的检查发生在服务器端,实际运行软件的物理机器是终端服务器本身,客户端只是作为显示终端,不直接触发许可检查。

所以,如果你的公司用的是浮动许可证,RDP环境下用软件,至少在“能不能用”这个问题上没有障碍。

二、真正的问题:RDP会话断开后许可证不释放

能用是能用,但问题出在“用完怎么还”上。

RDP环境下浮动许可的占用和回收,有几个典型的麻烦场景:

场景一:用户断开RDP会话,但没有退出软件

用户点了一下RDP窗口的“×”,会话断开了,但工作站上的软件进程还在运行。许可证仍然被占用着,没有释放。服务器端没有任何释放通知。

如果用户再次RDP登录,打开软件,又会签出一个新的许可证。同一个用户,同一台机器,可能同时占用两个或更多许可证。

远程桌面(RDP)环境下浮动许可

场景二:RDP会话超时被服务器踢出

Windows终端服务器有会话超时设置。用户长时间不操作,会话被自动终止,但软件进程可能没有正常退出。许可证同样挂在服务器上,成为“僵尸会话”。

场景三:网络闪断导致RDP断开

用户通过网络使用RDP,中间网络波动导致会话中断,但工作站上的软件还在运行。许可证没有被释放。

这些场景的共同特点是:客户端进程还在,但用户已经不在了。 许可证占用状态和实际使用状态脱节。

三、根本原因:FlexNet的“无握手协议”设计

为什么会出现这种情况?根源在FlexNet的通信机制上。

FlexNet采用了一种“无握手协议”设计。当客户端向服务器发送许可证释放数据包时,服务器不会返回确认信号。这意味着:

  • 如果释放数据包在传输过程中丢失,服务器永远不会知道许可证应该被释放
  • 如果客户端进程异常终止,释放请求根本没发出去,服务器同样不知道
  • 服务器会继续将许可证标记为“已占用”,直到超时或被手动清理

TCP层的重传机制在这种情况下作用有限。客户端进程都崩溃了,谁来重传?

而默认情况下,FlexNet在Windows上的TCP/IP超时回收时间是最长2小时。也就是说,一个RDP会话断开后遗留的许可证,可能需要等2小时才能自动回到池子里。

四、解决方案:三种方法组合使用

方法一:配置TIMEOUT自动回收(最推荐)

这是解决RDP环境下许可证残留最有效的办法。通过options文件设置闲置超时,让服务器自动回收非活动状态的许可证。

在options文件中添加:

text

TIMEOUTALL 900

TIMEOUTALL对所有feature统一生效,n是秒数。900秒(15分钟)是一个合理的起点。也可以针对特定feature单独设置:

text

TIMEOUT feature_code n

其中feature_code是产品的feature名称,n是超时秒数。

配置完成后执行lmreread让配置生效。如果未生效,需要重启许可证服务。

需要注意: TIMEOUT的最小值是900秒(15分钟)。设置更短的时间不会生效。

方法二:手动释放僵尸会话(应急处理)

当许可证池被RDP残留会话占满时,管理员可以手动释放。

先用lmstat查看当前占用情况:

text

lmutil lmstat -a

输出示例:

text

Users of feature_name: (Total of 2 licenses issued; Total of 1 license in use)
"feature_name" v11.0, vendor:softname floating license username servername hostname(v9.0) (lic_server/27000 1201), started Fri 4/7 13:17

然后用lmremove强制释放:

text

lmutil lmremove feature_name username servername hostname

或者用handle方式:

text

lmutil lmremove -h feature_name servername 27000@lic_server 1201

其中1201是lmstat输出中的handle值。

如果lmremove被禁用(某些版本默认禁用),需要在启动lmgrd时去掉-x lmremove参数。

浮动许可的占用与回收

方法三:RDP客户端配置优化(预防)

在RDP客户端连接时,使用/admin参数可以避免消耗额外的会话许可。启用网络级身份验证(NLA)也能减少会话异常断开的情况。

在终端服务器上,合理设置会话超时和空闲会话限制,可以减少“僵尸会话”的产生。

五、几个容易被忽略的点

1. 同一用户在同一台机器上可能占用多个许可证

RDP断开重连后,如果旧会话的进程没有退出,新会话又打开了软件,同一个用户在同一台机器上会同时占用多个许可证。这在RDP环境下比本地环境更容易发生。

2. 用户退出应用后许可证仍被占用

用户明明关闭了软件,但许可证管理器仍然报告他正在占用license。这在RDP环境下尤其常见——用户关闭了RDP窗口,以为软件也关了,但实际上进程还在后台运行。

3. TS_OK只针对节点锁定许可证

TS_OK属性只解决节点锁定许可证在RDP下的可用性问题。浮动许可证不需要TS_OK,它天然支持RDP环境。如果你的license是浮动模式但RDP下报错-103,122,先确认license文件确实是浮动模式。

六、最后

RDP环境下浮动许可的占用与回收,核心问题就一个:会话断了,进程没断,许可证还挂着。

解决这个问题不能靠单一手段,需要组合使用:

  1. 配置TIMEOUTALL,让服务器自动回收闲置超过15分钟的许可证——这是最根本的解决方案
  2. 定期用lmstat检查,发现僵尸会话及时用lmremove清理
  3. 优化RDP客户端配置,减少异常断开的频率

默认的2小时超时太长了。对于RDP环境,把超时时间缩短到15分钟,能显著减少许可证池被残留会话耗尽的情况。同时提醒用户:断开RDP之前,先关掉软件。 这是成本最低的预防措施。


相关文章
技术文档
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
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空