Open MPI超订阅(--oversubscribe)运行MPI程序触发Segmentation fault求助
超订阅运行MPI程序触发段错误的排查方案
问题背景
使用Open MPI 4.1.2,执行命令mpirun -np 8 --oversubscribe ./a运行进程数超过CPU核心数的MPI C程序时,触发Segmentation fault(段错误),错误日志如下:
[0piero:68195] *** Process received signal *** [0piero:68195] Signal: Segmentation fault (11) [0piero:68195] Signal code: Address not mapped (1) [0piero:68195] Failing at address: 0x7fd162194c80 [0piero:68185] *** Process received signal *** [0piero:68185] Signal: Segmentation fault (11) [0piero:68185] Signal code: Address not mapped (1) [0piero:68185] Failing at address: 0x7ffbf42f13e0 [0piero:68185] [ 0] /lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7ffbf88e2520] [0piero:68185] [ 1] /lib/x86_64-linux-gnu/libstdc++.so.6(+0xdc2b0)[0x7ffbf48d42b0] [0piero:68185] [ 2] /lib/x86_64-linux-gnu/libc.so.6(+0x94b43)[0x7ffbf8934b43] [0piero:68185] [ 3] /lib/x86_64-linux-gnu/libc.so.6(+0x126a00)[0x7ffbf89c6a00] [0piero:68185] *** End of error message *** -------------------------------------------------------------------------- Primary job terminated normally, but 1 process returned a non-zero exit code. Per user-direction, the job has been aborted. -------------------------------------------------------------------------- --------------------------------------------------------------------------
排查与解决步骤
- 先验证超订阅是否为诱因:
改用等于CPU核心数的进程数运行(比如mpirun -np 4 ./a,根据实际核心数调整),如果仍触发段错误,说明问题根源是程序本身的内存操作错误,和超订阅无关。 - 检查程序内存常见问题:
- 数组越界:确认所有数组访问的索引是否在定义范围内,比如
int arr[10];不能访问arr[10]及以上位置。 - 空指针/野指针:检查是否存在未初始化的指针、释放内存后仍引用的指针,或者指向已释放内存的指针。
- 栈溢出:如果局部变量定义了超大数组(比如
int big_arr[1024*1024];),会导致栈空间不足,改用malloc/calloc动态分配内存到堆区。
- 数组越界:确认所有数组访问的索引是否在定义范围内,比如
- 用调试工具精准定位:
- 编译时添加调试信息:
mpicc -g your_program.c -o a - 用GDB调试:执行
mpirun -np 8 --oversubscribe xterm -e gdb ./a,在触发错误的终端中输入bt查看调用栈,直接定位到出错的代码行。 - 用Valgrind检测内存问题:执行
mpirun -np 8 --oversubscribe valgrind ./a,它会详细报告内存泄漏、越界访问、非法指针等问题。
- 编译时添加调试信息:
- Open MPI相关排查:
- 升级Open MPI版本:4.1.2存在部分已知bug,可升级到4.1.x系列的最新稳定版(如4.1.5)或更高大版本。
- 调整环境变量:如果程序混用OpenMP,设置
export OMP_NUM_THREADS=1避免MPI进程和OpenMP线程抢占资源。
内容的提问来源于stack exchange,提问作者piero
相关产品推荐
相关产品推荐

