Formality 连接被拒:license 与分布式 worker 连接速查
更新时间:2026-10-25。FAQ 速查页,属于 EDA 工具排错系列。Formality(fm_shell)报连接被拒集中在两类链路:启动时连 license server 取授权、大设计跑分布式等价验证时连 worker 主机。两类链路的报错文案相近,但一个是 FlexNet 授权体系的问题,一个是作业调度网络的问题,分诊入口不同。授权取不到(连得上但被拒签)见 Formality license checkout 失败,同族问题见 Design Compiler 连接被拒。
本文要回答的问题
- 报错里的端口和主机名怎么对应到 license 链路还是 worker 链路?
- lmstat 能查通、fm_shell 却连不上,差在哪一步?
- SNPSLMD 守护进程端口为什么要单独放行?
- 分布式 worker 连接被拒和 license 被拒怎么区分?
- 代理环境变量会不会把内网连接搞挂?
一、报错原文与现象
Error: Unable to connect to license server '<lic-host>' (Connection refused)
Checkout failed: Cannot connect to license server system. (-15,570)Error: Cannot connect to worker host '<farm-host>' port <port>: Connection refused
Distributed verification aborted.第一段是 license 链路:FlexNet 的 -15 错误码与 Connection refused 字样是标志。第二段是分布式 worker 链路:报错里出现的是计算节点主机名与 fm_shell 分发的端口,而非 license 端口。先读报错里的主机名属于哪台机器,是分辨两类链路最快的一步。
二、可能原因总览
| 现场 | 可能原因 | 处置 |
|---|---|---|
| license refused | lmgrd 未启动 | license 机启动 lmgrd |
| license refused | 只放行了 lmgrd 端口 | SNPSLMD vendor 端口一并放行 |
| license refused | SNPS_LICENSE_FILE 指向错 | 核对端口与主机名 |
| worker refused | 远端 fm_shell worker 进程未起 | 查作业调度投递日志 |
| worker refused | 计算节点防火墙拦内网端口 | 集群内端口段放行 |
| worker refused | 主机名在计算节点解析不到 | 统一内网 DNS 或 hosts |
| 时好时坏 | license 机负载高守护崩溃 | 守护拉起 + 查 lmgrd 日志 |
| 配了代理后全挂 | http_proxy 拦了内网连接 | 内网主机加 no_proxy |
三、逐条排查展开
license 链路:先确认「两个端口都在听」。 Synopsys 的 FlexNet 授权有两个端口:lmgrd 主端口(license 文件 SERVER 行第三个字段)和 SNPSLMD vendor daemon 端口。客户端先连 lmgrd、再被转介到 SNPSLMD,任一不通都是连接失败。到 license 服务器上确认:
ss -ltnp | grep lmgrd # 主端口
ss -ltnp | grep snpslmd # vendor 端口
lmstat -a -c <端口>@<lic-host> # 从客户端跑,能出授权清单即链路通lmstat 是最顺手的诊断工具:它从客户端视角走完整链路,能列出 server 状态、vendor 状态、各特性余量。lmstat 通而 fm_shell 不通,问题收窄到客户端环境变量——核对 SNPS_LICENSE_FILE(或 LM_LICENSE_FILE)指向的端口与主机名拼写,改动的环境变量要重开 shell 才生效。
vendor 端口要固定下来才好管理。 SNPSLMD 端口默认每次启动随机分配,防火墙没法按端口放行——这是「昨天还好好的、今天全公司连不上」的经典剧本(license 服务重启后端口变了,防火墙规则落空)。处置:在 license 文件的 DAEMON/VENDOR 行把 snpslmd 端口写死,防火墙按固定端口放行,此后重启服务不影响连通性。
license 排队行为会让人误判成连接故障。 Formality 在授权被占满时默认进队列等待,终端长时间无输出,不熟悉的人会当成「连不上」去查网络。区分方法:lmstat 看该特性的余量——余量为零且有人占用,是排队不是连接问题;余量充足却连不上,才回到本篇的连接链路排查。另外 FlexNet 支持三机冗余(triad)配置,主机列表里第一台拒绝对客户端是透明的(自动试下一台),但如果你把三台都填错或防火墙只放了一台,冗余就成了摆设——巡检时三台都要过 lmstat。
worker 链路:连接被拒多半是对端进程根本没起。 Formality 分布式验证把比对任务分发到一组 worker 主机,fm_shell 作为服务端等 worker 回连(或反向连接,取决于配置)。Connection refused 出现在这条链路上时,先查作业调度系统(LSF/GridEngine 等)的投递日志——worker 任务是真的跑起来了、还是排队失败/启动即退出。worker 进程没起的原因通常是环境脚本没 source、 license 在 worker 侧取不到(嵌套回第一类问题)、或节点资源不满足。
主机名解析是集群里的慢性病。 fm_shell 所在机器把任务发给 <farm-host>,而计算节点之间、计算节点回连主控时都要解析主机名。内网 DNS 覆盖不全的集群里,某些节点解析不到同伴的主机名,表现就是连接失败。判别:在出问题的 worker 节点上 getent hosts <主控主机名>,空输出即确诊。处置:集群统一 hosts 下发,或全部改用规范短主机名并保证 DNS 收录。
代理变量会误伤内网连接。 为下载而配的 http_proxy/https_proxy 会让一些走 socket 库的组件把内网连接也送去代理,代理对内网地址返回拒绝。判别:env 里看到有代理变量,且问题机器恰好是配了代理的那批。处置:
export no_proxy="localhost,.<内网域名>,<lic-host>,<farm-域名后缀>"把 license server 与集群域名后缀都加进 no_proxy,代理只服务真正的外网流量。
回归脚本里的 license 重试要有限度。 很多团队的 fm_shell 回归脚本在取不到授权时自动重试,但重试掩盖不了连接被拒——它是即时失败,重试一万次也是拒绝。脚本里区分两类错误码:队列等待类重试合理,连接拒绝类应立即上报告警,让值守去看服务而不是让作业空转。
区分两类链路的速记。 报错主机名是 license 服务器 → 第一类,lmstat 起手;报错主机名是计算节点、且出现在 distributed/parallel 字样附近 → 第二类,查调度日志起手。两类问题在同一台机器上并存也常见,各修各的。
四、排查流程图
这张图按「先分链路、各走各的诊断工具」组织。红色是故障入口,蓝色是定位动作,绿色是链路确认节点,橙色是修复动作,紫色是防复发沉淀。
读这张图抓住第一步:分链路只看报错里的主机名归属,三秒钟完成;之后 license 链路的金标准是 lmstat 从客户端跑通,worker 链路的金标准是调度日志里 worker 真实存活。
五、预防与纪律
- SNPSLMD 端口写死:license 文件 VENDOR 行固定端口,防火墙规则一次性到位,服务重启不再失联。
- lmgrd 挂守护:进程崩溃自动拉起,值班不再半夜收「全公司连不上 license」的电话。
- lmstat 进巡检:每天定时从代表性客户端跑一次 lmstat,余量与连通性一体监控。
- 集群主机名统一解析:内网 DNS 或统一下发 hosts,禁靠个人机器私配。
- 代理白名单制度化:配 http_proxy 的机器必须同步配 no_proxy 内网清单,写成模板。
- 分布式配置先小跑:新集群接入先用小设计跑一轮分布式验证,确认链路再上大设计。
这一篇在知识体系里的位置
本篇是 EDA 排错簇中「网络连接」节点的 FAQ 页:与 Formality license checkout 失败(授权签出侧)、Design Compiler 连接被拒(同厂同型)、Quartus 连接被拒(FPGA 侧同型)互补;Formality 功能侧总览与等价验证流程见 EDA 知识版图。
一句话总结
Formality 报 Connection refused 先按报错里的主机名分链路:license 服务器名走 lmstat 诊断,确认 lmgrd 与 SNPSLMD 两个端口都在听、防火墙都放行(vendor 端口务必写死);计算节点名走调度日志,确认 worker 进程真的起来了、节点间主机名互相解析得到;配了代理的机器把内网清单加进 no_proxy;最后把端口清单、守护、巡检固化成制度,连接被拒就不再是半夜故障。