运行MPI程序出现'mpirun: Forwarding signal 18 to job'错误求助
解决
mpirun: Forwarding signal 18 to job问题的排查步骤 信号含义说明
信号18对应SIGCONT,用于恢复被暂停的进程。mpirun转发该信号,说明你的MPI作业进程或mpirun自身收到了这个信号——由于仅你遇到此问题,优先排查个人专属环境的差异。
具体排查与解决步骤
终端/SSH会话休眠触发(最可能原因)
你的本地终端或SSH客户端可能因自动锁屏、休眠超时,导致会话先发送SIGSTOP暂停进程,随后又发送SIGCONT恢复,被mpirun捕获并转发:- 用
screen或tmux启动作业,脱离当前终端会话:tmux new-session -s calc_job mpirun [你的运行参数] # 按Ctrl+B+D detach,后续用tmux attach -t calc_job重新连接 - 或用
nohup后台运行,避免终端状态影响:nohup mpirun [你的运行参数] > calc.log 2>&1 & - 调整SSH客户端KeepAlive设置,在本地
~/.ssh/config中添加:
防止SSH会话超时断开。ServerAliveInterval 60 ServerAliveCountMax 5
- 用
个人账号资源限制差异
即使bashrc配置一致,个人账号可能存在额外资源限制:- 运行
ulimit -a,对比同事的输出,重点检查cpu time、max user processes、virtual memory等限制是否不同。 - 若使用集群调度系统(如Slurm/PBS),查看作业调度日志,确认是否因队列资源不足被系统暂停后恢复。
- 运行
MPI信号转发配置调整
尝试禁用OpenMPI的信号转发,验证是否消除提示:mpirun --disable-signal-forwarding [你的运行参数]注意:禁用转发可能掩盖其他潜在问题,仅用于测试定位。
系统日志与环境变量排查
- 查看计算节点的系统日志(如
/var/log/syslog或/var/log/messages),在错误出现的时间点附近查找进程暂停、资源告警等记录。 - 对比与同事的依赖组件相关环境变量:
同时检查env | grep -E "(MPI|TRILINOS|BOOST|LAPACK)"module list输出,确保组件加载顺序、版本完全一致。
- 查看计算节点的系统日志(如
内容的提问来源于stack exchange,提问作者Antonella Longo
相关产品推荐
相关产品推荐

