ANSYS Fluent 2025 集群并行计算完整配置指南
自己的安装过程以及遇到的问题整理,又有问题,还请他家批评指正


适用环境:Rocky Linux / RHEL / CentOS + NVIDIA GPU + ANSYS 2025 R2
整理日期:2026-05-21
作者:小痴 & 二毛
安装新驱动时提示旧模块残留,或图形程序无法启动:
WARNING: An NVIDIA kernel module 'nvidia-drm' appears to be already loaded in your kernel.qt.qpa.xcb: could not connect to display localhost:10.0
第1步:停掉图形服务
systemctl stop display-manager
第2步:查看当前加载的 nvidia 模块
lsmod | grep nvidia
第3步:用 rmmod 从内存卸载(注意顺序!)
rmmod nvidia_drmrmmod nvidia_modesetrmmod nvidia_uvmrmmod nvidia
第4步:如果 rmmod 报 "module is busy",先杀占用进程
fuser -v /dev/nvidia* 2>/dev/null
第5步:如果驱动文件已被删但内存模块清不掉 → 直接重启
reboot
# 检查 RPM 包残留rpm -qa | grep -i nvidia# 如有输出,全部删除:rpm -e --nodeps $(rpm -qa | grep -i nvidia)# 检查 DKMS 注册dkms status# 移除残留:dkms remove nvidia/<版本号> --allrm -rf /var/lib/dkms/nvidia*
# 确认环境干净后安装lsmod | grep nvidia# 应无输出nvidia-smi# 应报 command not found./NVIDIA-Linux-x86_64-<版本号>.run --silent --dkms --no-x-check --no-nouveau-check# 验证nvidia-smi⚠️ 关键经验:
modprobe -r依赖磁盘上的.ko文件,如果驱动已删但模块还在内存里,必须用rmmod或直接reboot。
# Rocky Linux / RHEL 默认用 GDMsystemctl start gdm# 或者通用方式systemctl start display-manager# 设为默认开机进入图形界面systemctl set-default graphical.target
现象1:闪退回登录页
~/.Xauthority 权限不对chmod 644 ~/.Xauthority现象2:闪退回登录页
dconf 锁死rm -f ~/.config/dconf/user现象3:闪退回登录页
mv ~/.config/gnome-session ~/.config/gnome-session.bak现象4:闪退回登录页
setenforce 0 测试确认# 一条命令看所有关键信息su - username -c "echo '=== home space ==='; df -h .; echo '=== Xauth ==='; ls -la .Xauthority .ICEauthority 2>/dev/null; echo '=== xsession errors (last 30) ==='; tail -30 .xsession-errors 2>/dev/null"
Fluent 启动时报错:
Connected License Server List: <Shared_Web_License_Server>Unexpected license problem; exiting.Error in the fluent process : fatal error (disconnected)
或 License Manager 网页显示 "The license manager is stopped"。
ANSYS License Manager 有两个独立组件:
⚠️ 重要:Tomcat 能跑 ≠ FlexNet 在跑!两者是独立组件,需要分别启动。
# 先清理残留进程pkill -9 lmgrd; pkill -9 ansyslmd; pkill -9 tomcatsleep 1# 启动 FlexNet 核心服务(这是真正提供 license 的)/opt/software/ansys_inc/shared_files/licensing/linx64/lmgrd -c /license.txt -l /opt/software/ansys_inc/shared_files/licensing/logs/license.log# 验证ps aux | grep lmgrd | grep -v grepss -tlnp | grep -E "1055|2325|1084"
可以! ANSYS FlexNet 是离线授权模式,完全不需要外网。
/license.txt | |
验证内网连通:
nc -zv <LicenseServer_IP> 2325 && echo"可达"After=network-online.target | ||
Restart=on-failure | ||
journalctl -u ansys-license | ||
systemctl stop | ||
创建 /etc/systemd/system/ansys-license.service:
# 在 主节点 上执行cat > /etc/systemd/system/ansys-license.service << 'EOF'[Unit]Description=ANSYS License Server (LMCenter + FlexNet)After=network-online.target remote-fs.target nfs-client.targetWants=network-online.target[Service]Type=oneshotRemainAfterExit=yes# 1. 清理残留进程(不用 -f 参数,避免误杀自己)ExecStartPre=/bin/bash -c "pkill -9 lmgrd; pkill -9 ansyslmd; pkill -9 tomcat; sleep 2; exit 0"# 2. 等待 license 文件就绪(防止开机时文件还没挂载好)ExecStartPre=/bin/bash -c "for i in $(seq 1 15); do test -f /license.txt && exit 0; sleep 2; done; exit 1"# 3. 启动 LMCenter(Tomcat 管理界面,端口 1084)ExecStartPre=/bin/bash -c "nohup /opt/software/ansys_inc/shared_files/licensing/start_lmcenter >/dev/null 2>&1 & sleep 5; exit 0"# 4. 启动 FlexNet lmgrd(端口 1055/2325)ExecStart=/bin/bash -c "nohup /opt/software/ansys_inc/shared_files/licensing/linx64/lmgrd -c /license.txt -l /opt/software/ansys_inc/shared_files/licensing/logs/license.log >/dev/null 2>&1 & exit 0"# 5. 停止时清理所有进程ExecStop=/bin/bash -c "pkill -9 lmgrd; pkill -9 ansyslmd; pkill -9 tomcat; exit 0"User=rootTimeoutStartSec=120[Install]WantedBy=multi-user.targetEOFsystemctl daemon-reloadsystemctl enable ansys-license.servicesystemctl start ansys-license.service
oneshot | ||
yes | ||
network-online.target remote-fs.target nfs-client.target | ||
120 |
⚠️ 踩坑记录(2026-05-22 更新):
Type=forking→ 需要 .pid文件但 lmgrd 不生成 → timeout 失败Type=simple→ lmgrd fork 后父进程退出 → systemd 认为服务 dead ExecStartPre内嵌复杂 shell → systemd 解析引号报错 → status=203/EXECpkill -9 -f lmgrd→ -f匹配命令行,把 systemd 自己的 bash 进程也杀了 → 自伤退出/licensing/目录在 NFS 上 → 开机时脚本不存在 → status=203/EXEC- 最终方案:
Type=oneshot+RemainAfterExit=yes+ 去掉-f+ 等 NFS 就绪✅
# 加载并启用开机自启systemctl daemon-reloadsystemctl enable ansys-license.service# 启动systemctl start ansys-license.service# 查看状态systemctl status ansys-license.service# 重启(改了 license 后)systemctl restart ansys-license.service# 停止systemctl stop ansys-license.service# 查看实时日志journalctl -u ansys-license -f
适用场景:双节点集群,node01(10.0.0.1)为主节点 + License Server,node02(10.0.0.2)为计算节点。
两台机器通过 IB 交换机互联,/home和/opt/software通过 NFS 共享。
方案A:只让 node01 跑 License Server(✅ 推荐)
10.0.0.1 | |
方案B:两台都跑 License Server(双机独立)
10.0.0.1 或 10.0.0.2 | |
架构说明:
10.0.0.1 | ||||
10.0.0.1 |
node01 配置(已在第四章完成):
ansys-license.service/license.txtnode02 配置:
ansys-license.service/home/opt/software NFS 挂载正常(df -h 确认)~/.ssh/rclibmpi.so.12 找不到的问题)10.0.0.1验证 node02 能访问 node01 的 License Server:
# 在 node02 上验证nc -zv 10.0.0.1 2325 && echo "✅ License Server 可达"# 或用 lmutil 查验 license/opt/software/ansys_inc/shared_files/licensing/linx64/lmutil lmstat -a -c 2325@10.0.0.1
前提条件:
/license.txt,HostID 分别对应各自的 MAC 地址node02 的 ansys-license.service:
内容与 node01 完全相同(因为 /opt/software 是 NFS 共享的,ANSYS 程序路径一致,直接复制即可):
# 在 node02 上执行cat > /etc/systemd/system/ansys-license.service << 'EOF'[Unit]Description=ANSYS License Server (LMCenter + FlexNet)After=network-online.target remote-fs.target nfs-client.targetWants=network-online.target[Service]Type=oneshotRemainAfterExit=yes# 1. 清理残留进程(不用 -f 参数,避免误杀自己)ExecStartPre=/bin/bash -c "pkill -9 lmgrd; pkill -9 ansyslmd; pkill -9 tomcat; sleep 2; exit 0"# 2. 等待 license 文件就绪(防止开机时文件还没挂载好)ExecStartPre=/bin/bash -c "for i in $(seq 1 15) ; do test -f /license.txt && exit 0; sleep 2; done; exit 1"# 3. 启动 LMCenter(Tomcat 管理界面,端口 1084)ExecStartPre=/bin/bash -c "nohup /opt/software/ansys_inc/shared_files/licensing/start_lmcenter >/dev/null 2>&1 & sleep 5; exit 0"# 4. 启动 FlexNet lmgrd(端口 1055/2325)ExecStart=/bin/bash -c "nohup /opt/software/ansys_inc/shared_files/licensing/linx64/lmgrd -c /license.txt -l /opt/software/ansys_inc/shared_files/licensing/logs/license.log >/dev/null 2>&1 & exit 0"# 5. 停止时清理所有进程ExecStop=/bin/bash -c "pkill -9 lmgrd; pkill -9 ansyslmd; pkill -9 tomcat; exit 0"User=rootTimeoutStartSec=120[Install]WantedBy=multi-user.targetEOFsystemctl daemon-reloadsystemctl enable ansys-license.servicesystemctl start ansys-license.service
⚠️ 重要注意事项:
| license 文件 | |
| 端口冲突 | |
| logs 目录冲突 | /opt/software/.../logs/ |
| Fluent 连接谁 | License Preferences 里可以填 10.0.0.1 或 10.0.0.2,分别连不同的 License Server |
建议:修改 log 路径避免冲突(两台机器各自写本地 log):
# node01 的 service 文件中 -l 参数改为:-l /var/log/ansys-license-node01.log# node02 的 service 文件中 -l 参数改为:-l /var/log/ansys-license-node02.log
修改后 reload 并重启:
systemctl daemon-reloadsystemctl restart ansys-license.service
💡 实际建议:对于你目前的 2 节点集群(node01 + node02 在同一机房,通过 IB 交换机互联),方案A 更简单实用。只需要在 node01 上维护一份 license 文件,node02 开机后直接连 node01 的 License Server 即可。
2026-05-27 新增:解决多节点并行启动时
Too many open files和Out of memory (ulimit -l)报错。
多节点并行启动时(Fluent 通过 SSH 在 node02 上启动进程),报以下错误:
Too many open files
和/或:
Please set max locked memory (ulimit -l) to 'unlimited' (current: 64 kbytes)Out of memory
以及:
error while loading shared libraries: libmpi.so.12: cannot open shared object file
ulimit -n | |||
ulimit -l | unlimited | ||
LD_LIBRARY_PATH | .bashrc,找不到 libmpi.so.12 |
/etc/security/limits.conf# 备份cp /etc/security/limits.conf /etc/security/limits.conf.bak.$(date+%F)# 修改 * 通配符(所有用户生效)sed -i 's/^\*\s*soft\s*nofile.*/\* soft nofile 1048576/' /etc/security/limits.confsed -i 's/^\*\s*hard\s*nofile.*/\* hard nofile 1048576/' /etc/security/limits.confsed -i 's/^\*\s*soft\s*memlock.*/\* soft memlock unlimited/' /etc/security/limits.confsed -i 's/^\*\s*hard\s*memlock.*/\* hard memlock unlimited/' /etc/security/limits.conf# 验证tail -10 /etc/security/limits.conf
⚠️ 如果 limits.conf 里已有 * soft nofile 1024 之类的配置,会被后面的 * 行覆盖,确保最终值是 1048576。
# system.conf(系统级)sed -i 's/^#DefaultLimitNOFILE=.*/DefaultLimitNOFILE=1048576:1048576/' /etc/systemd/system.confsed -i 's/^#DefaultLimitMEMLOCK=.*/DefaultLimitMEMLOCK=infinity:infinity/' /etc/systemd/system.confgrep -q '^DefaultLimitNOFILE=' /etc/systemd/system.conf || echo 'DefaultLimitNOFILE=1048576:1048576' >> /etc/systemd/system.confgrep -q '^DefaultLimitMEMLOCK=' /etc/systemd/system.conf || echo 'DefaultLimitMEMLOCK=infinity:infinity' >> /etc/systemd/system.conf# user.conf(用户级)sed -i 's/^#DefaultLimitNOFILE=.*/DefaultLimitNOFILE=1048576:1048576/' /etc/systemd/user.confsed -i 's/^#DefaultLimitMEMLOCK=.*/DefaultLimitMEMLOCK=infinity:infinity/' /etc/systemd/user.confgrep -q '^DefaultLimitNOFILE=' /etc/systemd/user.conf || echo 'DefaultLimitNOFILE=1048576:1048576' >> /etc/systemd/user.confgrep -q '^DefaultLimitMEMLOCK=' /etc/systemd/user.conf || echo 'DefaultLimitMEMLOCK=infinity:infinity' >> /etc/systemd/user.conf# user slice(systemd 用户会话 slice)mkdir -p /etc/systemd/user/user.slice.dcat > /etc/systemd/user/user.slice.d/limits.conf << 'EOF'[Slice]LimitNOFILE=1048576LimitMEMLOCK=infinityEOF# 重载 systemdsystemctl daemon-reexecsystemctl daemon-reload
# GDM 密码登录grep -q 'pam_limits.so' /etc/pam.d/gdm-password || echo 'session required pam_limits.so' >> /etc/pam.d/gdm-password# GDM 自动登录(如有)[ -f /etc/pam.d/gdm-autologin ] && grep -q 'pam_limits.so' /etc/pam.d/gdm-autologin || ( [ -f /etc/pam.d/gdm-autologin ] && echo 'session required pam_limits.so' >> /etc/pam.d/gdm-autologin )# 字符终端登录grep -q 'pam_limits.so' /etc/pam.d/login || echo 'session required pam_limits.so' >> /etc/pam.d/login# SSH 登录grep -q 'pam_limits.so' /etc/pam.d/sshd || echo 'session required pam_limits.so' >> /etc/pam.d/sshdsystemctl restart sshd
~/.ssh/rc(解决 SSH 远程启动时 libmpi.so.12 找不到的问题)所有节点的 普通 用户(username)都要做!
cat > /home/username/.ssh/rc << 'EOF'#!/bin/bashexport LD_LIBRARY_PATH=/opt/software/ansys_inc/v252/fluent/fluent25.2.0/multiport/mpi/lnamd64/intel/lib:$LD_LIBRARY_PATHulimit -n 65536 2>/dev/nullulimit -l unlimited 2>/dev/nullEOFchmod 755 /home/username/.ssh/rc
原理:~/.ssh/rc 在每次 SSH 连接时执行(包括 Fluent 远程启动进程的非交互式 SSH),确保 LD_LIBRARY_PATH 被正确设置。
必须完全注销图形会话后重新登录!
# 注销当前用户(图形界面点注销,或执行:)loginctl terminate-user username# 重新登录后验证ulimit -n# 应显示 1048576ulimit -l# 应显示 unlimited
⚠️ 注意:修改 limits.conf 和 systemd 配置后,关闭终端窗口不够,必须完全注销并重新登录(图形界面)才能生效。
各节点配置检查清单
limits.conf | tail -5 /etc/security/limits.conf | ||
systemd/system.conf | grep DefaultLimit /etc/systemd/system.conf | ||
systemd/user.conf | grep DefaultLimit /etc/systemd/user.conf | ||
user.slice.d/limits.conf | cat /etc/systemd/user/user.slice.d/limits.conf | ||
pam_limits.so 已添加 | grep pam_limits /etc/pam.d/gdm-password | ||
~/.ssh/rc | cat ~/.ssh/rc | ||
ulimit -n = 1048576 | ulimit -n | ||
ulimit -l = unlimited | ulimit -l |
每次启动 Fluent 前,在终端里手动设置:
ulimit -n 65536ulimit -l unlimitedfluent -g -t4 -cnf="node01:4,node02:4" -ipc=ib
⚠️ 临时方案关闭终端后就失效,下次启动 Fluent 需要重新设置。生产环境请用上面的永久方案。
前提:已完成本章「六、Fluent 并行计算系统限制问题解决方案」的所有配置!
ls /opt/software/ansys_inc | ||
ssh node01 hostname | ||
ss -tlnp | grep 2325 | ||
ssh node01 "nc -zv <LS_IP> 2325" | ||
which mpirun |
# 主节点生成密钥(如果没有)ssh-keygen (回车,一直按回车自动生成密钥)# 分发公钥到所有计算节点ssh-copy-id user@node01ssh-copy-id user@node02ssh-copy-id user@node03# 验证免密ssh node01 "hostname && date"
cat > ~/fluent_hosts << 'EOF'node01:4node02:4node03:4EOF
格式说明:
主机名:核数 # 每个 IP 后跟该节点使用的 CPU 核数
# 写入全局 profile(所有用户生效)cat >> /etc/profile.d/ansys2025.sh << 'EOF'export ANSYSLMD_LICENSE_FILE="2325@<LicenseServer_IP>"EOFsource /etc/profile.d/ansys2025.sh
fluent25r2| Distributed Memory (MPI) | |
/home/user/fluent_hosts | |
# 单机多核测试fluent25r2 3ddp -g -t8 < /dev/null# 集群多节点并行fluent25r2 3ddp \-g \# batch 模式(无 GUI)-t8 \# 总进程数-cnf=~/fluent_hosts \# 机器文件-mpi=intel \# MPI 类型-i input.jou# 输入脚本# 交互式 GUI + 并行fluent25r2 3ddp -t8 -cnf=~/fluent_hosts
| 集群并行(多核/多节点) | 1个任务 + N个HPC并行许可 |
如果并行时报 license 错误但单机能用,大概率是 HPC 并行许可证数量不足。检查方法:
# 查看 license 使用情况<lmutil路径>/lmstat -a -c 2325@localhost# 或在 License Manager 网页查看# 左侧菜单 → View FlexNet Licenses# 关注 hpc / aaR_hpc 特征的 total / used / available
# MPI 通信需要开放端口范围firewall-cmd --permanent --add-port={7890-7900}/tcpfirewall-cmd --reload# 或者在 fluent 中指定端口fluent25r2 3ddp -t8 -cnf=~/fluent_hosts -mpioptions="-mca btl_tcp_port_include 7890:7900"
kernel module 'nvidia-drm' already loaded | rmmodreboot | |
could not connect to display | -g 参数或配 X11 转发 | |
modprobe: FATAL | rmmod 替代,或 reboot | |
nvidia-smi |
Unexpected license problem | ||
license manager is stopped | ||
port 1084 already in use | pkill -9 tomcat | |
systemctl status=203/EXEC | ||
pkill 自伤退出 | pkill -9 -f lmgrd | -f,只匹配进程名 |
/license.txt | After=nfs-client.target | |
connection refused | ssh-keygen + ssh-copy-id | |
nc -zv LS_IP 2325 通 | ||
/etc/fstab 和 mount |
lsmod | grep nvidia | |
rmmod nvidia_drm nvidia_modeset nvidia_uvm nvidia | |
ss -tlnp | grep 端口号 | |
fuser -v /dev/nvidia* | |
xauth list | |
xauth merge /tmp/xauth_tmp | |
sestatusgetenforce | |
setenforce 0 |
以下命令按顺序执行,可在全新环境中快速搭建:
#!/bin/bash# ===== ANSYS Fluent 集群环境一键配置参考 =====# 请根据实际情况修改路径和 IP 地址!# ---- 1. 变量定义 ----LICENSE_SERVER_IP="你的License服务器IP"LICENSE_FILE="/license.txt"LMGRD_PATH="/opt/software/ansys_inc/shared_files/licensing/linx64/lmgrd"LOG_PATH="/opt/software/ansys_inc/shared_files/licensing/logs/license.log"# ---- 2. 配置 License Server 开机自启 ----cat > /etc/systemd/system/ansys-license.service << EOF[Unit]Description=ANSYS License Server (LMCenter + FlexNet)After=network-online.target remote-fs.target nfs-client.target[Service]Type=oneshotRemainAfterExit=yes# 1. 清残留进程(去掉 -f,避免自伤)ExecStartPre=/bin/bash -c "pkill -9 lmgrd; pkill -9 ansyslmd; pkill -9 tomcat; sleep 2; exit 0"# 2. 等 NFS 就绪,/license.txt 可访问ExecStartPre=/bin/bash -c "for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do test -f /license.txt && exit 0; sleep 2; done; exit 1"# 3. 启动 LMCenter (Tomcat 管理界面,端口 1084)ExecStartPre=/bin/bash -c "nohup /opt/software/ansys_inc/shared_files/licensing/start_lmcenter >/dev/null 2>&1 & sleep 5; exit 0"# 4. 启动 FlexNet lmgrd (核心证书服务,端口 1055/2325)ExecStart=/bin/bash -c "nohup \$LMGRD_PATH -c \$LICENSE_FILE -l \$LOG_PATH >/dev/null 2>&1 & exit 0"# 5. 停止时清理所有进程ExecStop=/bin/bash -c "pkill -9 lmgrd; pkill -9 ansyslmd; pkill -9 tomcat; exit 0"User=rootTimeoutStartSec=120[Install]WantedBy=multi-user.targetEOF# ---- 3. 设置 License 环境变量 ----cat > /etc/profile.d/ansys2025.sh << EOFexport ANSYSLMD_LICENSE_FILE="2325@\$LICENSE_SERVER_IP"EOF# ---- 4. 启用并启动 ----systemctl daemon-reloadsystemctl enable ansys-license.servicesystemctl start ansys-license.serviceecho"✅ ANSYS License Server 配置完成!"echo" 验证: systemctl status ansys-license.service"echo" 验证: ss -tlnp | grep 2325"
本文档基于 #Rocky #Linux + #ANSYS2025R2 #fluent2025+ #NVIDIA 580.105.08 实际操作整理。如有问题欢迎交流讨论。