问题

研发工程师启动 Virtuoso 时,CDS.log 中出现以下警告,导致启动缓慢甚至卡住:

1
2
3
4
*WARNING* file /home/ben/CDS.log cls: Unable to connect to clsbd on host "rd-172-31-0-122.icinfra.cn".
Check if clsbd is running on the host. If the host is not valid remove
the ".cdslck" lock file. The connect timeout length can be set using
the CLS_CLSBD_CONNECT_TIMEOUT environment variable.

原因

clsbd 全称 Cadence Locking Service Boolean Daemon,即”布尔守护进程”。它只做一件事:判断某个进程 PID 是否还活着,返回 yes/no。

触发机制如下:

  1. 之前有一个 Virtuoso/DFII session 在主机 rd-172-31-0-122.icinfra.cn 上运行,退出时留下了 .cdslck 锁文件(如 ~/CDS.log.cdslck)。
  2. 新 session 启动时,Cadence CLS 尝试联系该主机上的 clsbd,确认原进程是否仍存活。
  3. 如果联系不上(主机下线、hostname 无效、clsbd 未运行),就报此警告。
  4. CLS 出于保守策略,不会自动释放锁,因此可能造成启动卡顿。

主机名 rd-172-31-0-122 的命名规律表明这是一台动态分配的节点(私有 IP 172.31.0.122),很可能已被销毁或重建,锁文件是遗留物。

解决方案

方案一:删除孤立的 .cdslck 锁文件(最常用)

1
2
3
4
5
6
7
8
9
# 确认锁文件位置
ls ~/CDS.log*.cdslck

# 用 clsAdminTool 安全清除(推荐)
clsAdminTool -asre ~/CDS.log
clsAdminTool -asre ~/CDS.log.1   # 如有多个,依次处理

# 或直接手动删除
rm ~/CDS.log.cdslck

clsAdminTool -asre 只移除该文件的编辑锁,比 -are 更精准(后者会递归处理整个目录树,耗时较长)。

方案二:确认目标主机上 clsbd 是否运行

如果那台主机仍然有效,登录上去检查:

1
2
3
4
ps aux | grep clsbd

# 如未运行,手动启动
$CDSHOME/tools/bin/clsbd &

方案三:缩短连接超时,避免长时间卡顿

默认超时很长。可以设置环境变量让它更快放弃:

1
2
3
4
5
# bash/zsh
export CLS_CLSBD_CONNECT_TIMEOUT=5

# csh/tcsh
setenv CLS_CLSBD_CONNECT_TIMEOUT 5

建议将此变量写入 site 级别的环境脚本(如 /etc/profile.d/ 下的公共配置),避免用户每次手动设置。

总结

情形 解决方法
原主机已下线/销毁 直接删除 .cdslck 文件,或用 clsAdminTool -asre
原主机存在但 clsbd 未运行 在目标主机启动 clsbd
不确定,只想加快启动 设置 CLS_CLSBD_CONNECT_TIMEOUT=5

参考

  • Cadence ASK: Stranded lock recovery takes very long time if remote machine is not available (a1Od0000000nanBEAQ)
  • Cadence ASK: Unable to Launch virtuoso session due to locked CDS.log files (a1Od0000000uu9tEAA)
  • Cadence Application Infrastructure User Guide — Cadence Locking System / Boolean Daemon (clsbd)