1. 从一次真实的授权中断说起
如果你正在用 Ansys 做仿真,某天早上打开 Workbench 或者 Electronics Desktop,突然弹出一句Ansys License Manager is stopped,或者更让人抓狂的connection timed out while reading data,那你大概率已经踩进了授权服务这个坑里。这个问题的典型表现是:软件本身装得好好的,昨天还能算,今天就不行了;或者刚装完就报错,连界面都进不去。它跟你的模型、网格、求解设置一点关系都没有,纯粹是授权服务这一层出了问题。
我这些年帮同事、朋友处理过不下几十次这类故障,从学生版到商用版,从单机授权到网络浮动授权,几乎各种组合都遇到过。可以很负责任地说,Ansys 的授权问题里,超过七成不是授权文件本身坏了,而是服务没起来、端口被占、主机名对不上、或者残留进程在捣乱。很多人一看到报错就急着重装软件,结果重装三遍还是同样的错误,因为根因根本不在软件安装包上。
这篇内容面向的是所有被 Ansys 授权问题卡住的人——不管你是刚装完软件的新手,还是维护实验室授权服务器的老手。我会把License Manager is stopped和连接失败这两类问题拆开讲清楚,从底层机制到逐步排查,再到彻底清理重装的完整流程,尽量让你看完之后能自己定位问题,而不是靠反复重装碰运气。关键词就三个:Ansys、License Manager、连接失败,全文围绕它们展开。
2. 先搞懂 Ansys 授权到底是怎么跑起来的
2.1 授权服务的三层结构
很多人排查授权问题效率低,根本原因是没搞清楚这套东西的运作方式。Ansys 的授权体系大致分三层,理解这三层,排查时就能快速缩小范围。
第一层是授权文件(license file),通常是一个.lic文件,里面写明了你买了哪些模块、有效期到什么时候、绑定在哪台机器上。这个文件是静态的,一般不会自己变坏,除非你手动改过或者被误删。
第二层是授权服务进程(License Manager / lmgrd),它负责读取.lic文件,然后在网络上"广播"这些授权,等待客户端来申请。Ansys 用的是 FlexNet 授权机制,核心进程叫lmgrd,还有一个厂商守护进程ansyslmd。这两个进程必须同时活着,授权才能正常发放。
第三层是客户端请求,也就是你打开的 Workbench、Fluent、Maxwell 这些软件,它们通过网络向授权服务发起请求,拿到授权后才能启动。
Ansys License Manager is stopped这个报错,说的就是第二层——服务进程没在跑。而connection timed out则是第三层的问题——客户端连不上服务,可能是服务没起,也可能是网络、端口、防火墙挡在了中间。
2.2 为什么服务会"自己停掉"
服务不会无缘无故停。根据我的经验,常见原因有这么几类:
- 系统重启后服务没有自动启动。这是最常见的一种。Windows 服务默认可能是"手动"启动类型,重启后不会自己起来。
- 授权文件路径变了或者文件被移动。服务启动时找不到
.lic文件,启动失败后自动退出。 - 端口被占用。FlexNet 默认用 1055 和 2325 两个端口,如果被别的程序占了,服务起不来。
- 主机名或 MAC 地址变了。授权文件里绑定了主机名和网卡物理地址,换了网络环境或者改了主机名,授权校验就失败。
- 残留的 lmgrd 进程。有时候服务显示"已停止",但后台还有个僵死的 lmgrd 进程占着端口,导致新服务起不来。
- 杀毒软件或安全策略拦截。某些安全软件会把 lmgrd 当成可疑进程干掉。
理解这些原因之后,你会发现排查思路其实很清晰:先确认服务状态,再确认授权文件,然后查端口和进程,最后看网络和防火墙。
2.3 单机授权和网络授权的区别
这里要特别区分两种部署方式,因为排查方法完全不同。
单机授权是把授权服务装在本机,客户端也连本机(通常是localhost或1055@本机主机名)。这种模式下,问题基本都出在本机的服务、端口、主机名上。
网络授权是授权服务装在服务器上,多台客户端通过网络连接。这种模式下,除了服务器本身的问题,还要排查客户端到服务器的网络连通性、防火墙规则、DNS 解析等。
我见过太多人把网络授权的问题当成单机问题来查,在本机反复折腾服务,其实根因是服务器那边根本没开机或者防火墙挡了端口。所以第一步永远是搞清楚你的授权是哪种模式。
3. License Manager is stopped 的逐步排查链路
3.1 第一步:确认服务真实状态
不要只看报错弹窗,要亲自去系统里确认服务状态。Windows 下按Win + R,输入services.msc,找到名字里带Ansys或FlexNet的服务,看它的状态是"正在运行"还是"已停止"。
如果显示"已停止",先别急着点启动,因为直接启动大概率会失败。正确的做法是右键查看属性,确认"可执行文件的路径"指向的是不是正确的 lmgrd 位置,以及启动参数里的授权文件路径对不对。
在 Linux 下,用这条命令看服务状态:
# 查看 lmgrd 进程是否在跑 ps -ef | grep lmgrd ps -ef | grep ansyslmd # 查看服务状态(如果是 systemd 管理) systemctl status ansyslmd如果进程列表里什么都没有,说明服务确实没起来。如果有 lmgrd 但客户端还是连不上,那问题可能在端口或授权文件上。
3.2 第二步:手动启动服务看真实报错
图形界面点"启动"往往只给你一句"启动失败",不给原因。这时候要手动启动,才能看到真正的错误信息。
Windows 下打开命令提示符(建议用管理员权限),cd 到 lmgrd 所在目录,通常是:
cd "C:\Program Files\ANSYS Inc\Shared Files\Licensing\winx64" lmgrd.exe -c "C:\Program Files\ANSYS Inc\Shared Files\Licensing\license_files\ansyslmd.lic" -l "C:\temp\lmgrd.log"Linux 下类似:
cd /ansys_inc/shared_files/licensing/linx64 ./lmgrd -c /ansys_inc/shared_files/licensing/license_files/ansyslmd.lic -l /tmp/lmgrd.log关键是那个-l参数,它把日志写到指定文件。启动失败后,打开这个日志文件,里面会明确告诉你失败原因,比如"cannot find license file"、"port already in use"、"invalid hostid"等等。这一步是整个排查过程中信息量最大的环节,强烈建议每次都做。
3.3 第三步:读懂日志里的关键行
日志文件里信息很多,但真正有用的就那么几行。我总结了几种典型报错和对应含义:
| 日志报错关键词 | 含义 | 处理方向 |
|---|---|---|
Cannot find license file | 找不到授权文件 | 检查-c后面的路径是否正确 |
Failed to open the TCP port | 端口被占用 | 换端口或杀掉占用进程 |
Invalid hostid on SERVER line | 主机名/MAC 不匹配 | 核对授权文件里的绑定信息 |
License server does not support this feature | 授权文件里没有该模块 | 确认购买的模块和版本 |
lmgrd is already running | 已有进程在跑 | 先杀掉旧进程再启动 |
看到Invalid hostid这类报错,基本可以确定是授权文件和当前机器对不上了。这时候要么改授权文件里的主机名,要么联系供应商重新生成授权。
3.4 第四步:端口占用的排查与处理
FlexNet 默认用两个端口:lmgrd用 1055,ansyslmd用 2325。如果这两个端口被别的程序占了,服务就起不来。
Windows 下查端口占用:
netstat -ano | findstr :1055 netstat -ano | findstr :2325Linux 下:
netstat -tlnp | grep 1055 netstat -tlnp | grep 2325 # 或者用 ss ss -tlnp | grep 1055如果发现端口被占,记下那个 PID,去任务管理器或ps里看看是什么程序。如果是残留的 lmgrd,直接杀掉;如果是别的软件,可以考虑给 Ansys 换端口。
换端口的方法是在授权文件里改 SERVER 行,比如把1055改成1056,同时客户端连接字符串也要跟着改。改完之后记得重启服务。
提示:改端口之后,所有客户端的连接配置都要同步更新,否则会出现"服务器在跑但客户端连不上"的情况。网络授权环境下尤其要注意这一点。
4. 连接失败类问题的网络层排查
4.1 先分清是"连不上"还是"连上了但被拒"
connection timed out和connection refused是两个不同的错误,含义完全不同。
timed out意思是客户端发出的连接请求石沉大海,没有任何回应。这通常是网络不通、防火墙丢包、或者服务器根本没开机。
refused意思是服务器收到了请求,但明确拒绝了。这通常是服务没在监听那个端口,或者端口号写错了。
还有一种The license server may be experiencing a high demand,这个报错说的是服务器在跑,但授权数量不够了,或者请求太频繁被限流。这种情况不是连接问题,而是授权容量问题。
分清楚这三种,排查方向就完全不同。timed out查网络,refused查服务和端口,high demand查授权数量和并发。
4.2 用 telnet 和 ping 快速定位网络问题
排查网络授权,最直接的工具就是ping和telnet。
先 ping 服务器,确认基本连通性:
ping 192.168.1.100如果 ping 不通,那问题在网络层,跟 Ansys 无关,先解决网络。
如果 ping 通了,再用 telnet 测端口:
telnet 192.168.1.100 1055如果 telnet 能连上(屏幕变黑或者显示连接成功),说明端口是通的,问题在授权服务本身。如果 telnet 卡住或者报"连接失败",说明端口不通,可能是防火墙挡了。
Windows 下如果没装 telnet 客户端,可以用 PowerShell 的Test-NetConnection:
Test-NetConnection -ComputerName 192.168.1.100 -Port 1055这个命令会明确告诉你TcpTestSucceeded是 True 还是 False,比 telnet 更直观。
4.3 防火墙和主机名解析这两个隐形杀手
防火墙是网络授权里最常见的坑。服务器上的防火墙可能挡了 1055 和 2325 端口,客户端根本连不进来。Windows 防火墙、Linux 的 iptables/firewalld、甚至某些企业级安全软件,都可能拦截。
处理方法是把这两个端口加入白名单。Windows 下可以在"高级安全 Windows Defender 防火墙"里新建入站规则,放行 TCP 1055 和 2325。Linux 下用 firewalld:
firewall-cmd --permanent --add-port=1055/tcp firewall-cmd --permanent --add-port=2325/tcp firewall-cmd --reload另一个隐形杀手是主机名解析。授权文件里 SERVER 行写的是主机名,比如SERVER mylicserver 001122334455 1055。客户端连接时如果用的是1055@mylicserver,就需要能把这个主机名解析成 IP。如果 DNS 解析不了,或者 hosts 文件里没配,就会连接失败。
解决办法是在客户端的 hosts 文件里加一条静态映射:
# Windows: C:\Windows\System32\drivers\etc\hosts # Linux: /etc/hosts 192.168.1.100 mylicserver这样即使 DNS 有问题,也能通过 hosts 解析到正确 IP。这个技巧在网络授权环境里非常实用,能省掉大量排查时间。
4.4 客户端连接字符串的写法陷阱
客户端配置授权服务器时,连接字符串的写法有讲究。常见格式是端口@主机名,比如1055@mylicserver。
这里有几个容易踩的坑:
- 端口和主机名顺序写反。必须是
端口@主机名,不是主机名@端口。 - 用了 IP 但授权文件绑定的是主机名。有些情况下用 IP 连不上,必须用主机名。
- 主机名大小写不一致。虽然理论上主机名不区分大小写,但某些环境下会出问题,建议完全按授权文件里的写法来。
- 多网卡机器连错网段。服务器有多张网卡时,客户端可能连到了错误的网段。
我遇到过一次特别隐蔽的问题:服务器有两张网卡,授权文件绑定的是网卡 A 的 MAC,但客户端通过网卡 B 的 IP 去连,结果一直超时。后来在客户端指定了网卡 A 的 IP 才解决。所以多网卡环境下,一定要确认客户端连的是授权绑定的那个网段。
5. 彻底清理与重装的正确姿势
5.1 为什么直接重装往往没用
很多人一遇到授权问题就重装 Ansys,结果发现重装之后问题依旧。原因很简单:重装软件不会清理授权服务的残留,也不会修复端口占用和主机名问题。如果根因是残留进程或者端口冲突,重装一百遍也没用。
正确的做法是:先彻底清理旧的授权服务,再重新安装配置。清理不干净,新装的服务照样起不来。
5.2 清理残留服务和进程的完整步骤
Windows 下的清理流程:
- 停止所有 Ansys 相关服务。在
services.msc里找到Ansys License Manager、FlexNet Licensing Service等,全部停止。 - 杀掉残留进程。打开任务管理器,结束所有
lmgrd.exe、ansyslmd.exe、FNPLicensingService.exe进程。 - 删除服务注册。用管理员权限打开命令提示符:
sc delete "Ansys License Manager" sc delete "FlexNet Licensing Service"- 清理安装目录。删除
C:\Program Files\ANSYS Inc\Shared Files\Licensing下的内容(保留授权文件备份)。 - 清理注册表。这一步要谨慎,用
regedit搜索Ansys和FlexNet,删除相关项。操作注册表前务必备份。
Linux 下的清理:
# 停止服务 systemctl stop ansyslmd systemctl stop lmgrd # 杀掉残留进程 pkill -9 lmgrd pkill -9 ansyslmd # 删除服务文件 rm /etc/systemd/system/ansyslmd.service systemctl daemon-reload清理完之后,重启一次机器,确保所有残留都释放干净,再开始重装。
5.3 重装时的关键配置项
重装授权服务时,有几个配置项必须注意:
- 安装路径不要有中文和空格。这是老生常谈,但确实有人栽在这上面。
- 授权文件路径要固定。建议放在一个专门的目录,比如
C:\AnsysLic\,不要放在桌面或临时目录。 - 服务启动类型设为"自动"。这样重启后服务能自己起来,避免"重启后授权失效"的问题。
- 记录主机名和 MAC 地址。安装前先确认,安装后核对授权文件里的绑定信息是否一致。
安装完成后,先手动启动一次服务,确认能起来,再用客户端测试连接。不要装完就直接开软件,那样出错了不好定位。
5.4 验证授权是否真正可用
服务起来不等于授权可用。要真正验证,得用 Ansys 自带的授权查询工具。
Windows 下在授权目录里有lmutil.exe,可以这样查:
lmutil lmstat -c 1055@localhost -a这个命令会列出所有可用的授权模块和当前使用情况。如果能看到你需要的模块(比如ansys、fluent、maxwell),说明授权正常。如果报错或者列表为空,说明授权还有问题。
Linux 下同理:
./lmutil lmstat -c 1055@localhost -a这一步是判断授权是否真正可用的金标准,比打开软件试要靠谱得多,因为它直接查询授权服务,不依赖客户端软件的状态。
6. 几个高频疑难场景的实战处理
6.1 重启后授权失效的根治方法
"每次重启电脑都要手动启动授权服务"是很多人遇到的烦人问题。根因是服务启动类型不是"自动",或者服务依赖项没配好。
根治方法:在服务属性里把启动类型改成"自动",并且设置"恢复"选项——第一次失败、第二次失败、后续失败都设为"重新启动服务"。这样即使服务偶尔崩溃,也能自动恢复。
如果改了自动还是不行,检查服务的"登录"选项卡,确认用的是有足够权限的账户。有些环境下服务以 Local System 运行会失败,需要改成管理员账户。
6.2 多版本 Ansys 共存的授权冲突
装了多个版本的 Ansys(比如同时有 2022 和 2024),授权服务可能互相冲突。常见表现是某个版本的模块找不到授权,或者服务反复重启。
处理原则是:多个版本尽量共用同一个授权服务。在安装新版本时,选择"使用现有的授权服务",而不是重新装一个。如果已经装了多个服务,保留一个,卸载其余的,然后让所有版本都指向这一个服务。
如果授权文件里同时包含多个版本的模块,确认版本号匹配。有时候授权文件是给旧版本生成的,新版本软件识别不了,需要重新生成授权。
6.3 学生版和商用版的授权差异
学生版(Ansys Student)的授权机制和商用版不同。学生版通常是本机授权,不需要单独装 License Manager,授权文件内置在安装包里。所以学生版一般不会出现License Manager is stopped的问题,如果报错,多半是安装不完整或者授权文件损坏。
商用版才需要独立的授权服务。如果你用的是学生版却看到 License Manager 相关报错,先确认是不是装错了版本,或者系统里残留了商用版的授权服务在干扰。
6.4 授权服务器高负载导致的间歇性失败
The license server may be experiencing a high demand这个报错,说明服务器在跑,但授权不够用了。这在多人共用的实验室或企业环境里很常见。
短期解决办法是错峰使用,或者等一会儿重试。长期解决办法是增加授权数量,或者优化授权分配策略。
还有一个容易被忽略的点:僵尸授权。有时候用户异常退出,授权没有正常释放,导致授权被占用但实际没人用。这时候可以用lmutil lmstat查看哪些授权被占用,必要时用lmutil lmremove强制释放。
# 查看某模块的详细占用情况 lmutil lmstat -c 1055@localhost -f ansys # 强制移除某个占用(谨慎使用) lmutil lmremove -c 1055@localhost -h 主机名 用户名 显示名 模块名强制释放要谨慎,因为可能影响正在正常使用的用户。建议先确认那个授权确实是僵尸占用再操作。
7. 我踩过的坑和总结出的经验
说几个我实际踩过的坑,都是文档里不会写的。
第一个坑是授权文件里的主机名和实际主机名不一致。有次帮人排查,服务怎么都起不来,日志报Invalid hostid。查了半天发现授权文件里写的是SERVER oldname ...,但机器主机名早就改成了newname。改回主机名或者重新生成授权才解决。所以改主机名之前一定要考虑授权的影响。
第二个坑是Windows 防火墙的"专用网络"和"公用网络"配置不同。有次服务器防火墙在专用网络下放行了端口,但客户端连过来时被识别为公用网络,规则没生效,一直超时。后来把两个网络配置都放行才解决。这个坑很隐蔽,因为你在服务器上测端口是通的,但客户端就是连不上。
第三个坑是杀毒软件静默拦截 lmgrd。某次装完授权服务,服务启动几秒后就自动停止,日志里没有任何错误。查了半天发现是杀毒软件把 lmgrd 当可疑进程隔离了。把授权目录加入杀毒软件白名单后正常。所以装完授权服务后,建议把授权目录和 lmgrd 进程加入安全软件白名单。
第四个坑是授权文件路径里有空格导致服务启动失败。Windows 服务启动参数里如果路径带空格,需要用引号包起来,但某些安装程序生成的参数没加引号,导致服务起不来。手动改服务参数加引号后解决。
这些坑的共同点是:报错信息往往不直接指向根因,需要结合日志、端口、进程、网络多个维度交叉排查。所以排查授权问题,耐心和系统性比什么都重要。别一上来就重装,先看日志,先查端口,先确认主机名,大部分问题都能在这几步里定位到。