You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS运行dl4j触发JVM SIGSEGV致命报错如何解决

Mac设备运行DL4J触发SIGSEGV崩溃解决方案

问题说明

同一份DL4J代码在Windows 10设备可正常运行,在指定配置的Mac设备上加载ND4J CPU后端后直接触发JVM致命崩溃,更换DL4J版本无法修复。

该问题不属于DL4J版本逻辑缺陷,核心诱因是旧版Oracle JDK 8的原生C++链接逻辑和macOS 10.15的系统libc++abi.dylib库存在ABI不匹配,触发native层段错误。

复现环境

  • 操作系统:macOS Catalina 10.15.7
  • 设备型号:MacBook Pro(13英寸,2019款,双Thunderbolt 3接口)
  • 硬件参数:2.9GHz双核Intel Core i5处理器,8GB 2133MHz LPDDR3内存
  • 显卡配置:Intel Iris Graphics 550 1536MB
  • JDK版本:Oracle JDK 8u60

核心报错日志

19:09:34.464 [main] INFO org.nd4j.linalg.factory.Nd4jBackend - Loaded [CpuBackend] backend
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007fff65aa2aa8, pid=2020, tid=3843
#
# JRE version: Java(TM) SE Runtime Environment (8.0_60-b27) (build 1.8.0_60-b27)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.60-b23 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# C  [libc++abi.dylib+0x10aa8]  __cxxabiv1::__si_class_type_info::has_unambiguous_public_base(__cxxabiv1::__dynamic_cast_info*, void*, int) const+0x4
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /Users/mac/Downloads/RL_DQN(19.9.27)/hs_err_pid2020.log
#
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.

解决步骤(按优先级从高到低尝试)

  • 替换JDK版本(90%以上场景可直接解决)
    当前使用的Oracle JDK 8u60为2015年发布的老旧版本,自带的C++运行时链接逻辑和Catalina系统库不兼容。直接替换为以下任意版本即可:
    • 升级Oracle JDK 8到8u381及以上的更新版本
    • 替换为适配macOS的OpenJDK发行版,推荐Zulu OpenJDK、Adoptium Temurin的8/11 LTS版本

    禁止修改系统/usr/lib目录下的原生库做兼容,会破坏macOS系统完整性。

  • 显式指定ND4J原生平台依赖
    更换JDK后仍异常的话,在项目构建配置中显式引入和DL4J版本完全匹配的nd4j-native-platform依赖,排除传递依赖引入的旧版本原生包。Maven配置示例:
    <dependency>
        <groupId>org.nd4j</groupId>
        <artifactId>nd4j-native-platform</artifactId>
        <version>替换为当前项目使用的DL4J版本号</version>
    </dependency>
    
  • 添加JVM启动参数规避链接冲突
    启动程序时追加以下参数,强制JavaCPP优先加载自带的依赖库,避免调用系统冲突符号:
    -Dorg.bytedeco.javacpp.pathsFirst=true
    -Djava.library.path=
    
  • 兜底方案:关闭OpenMP多线程优化
    以上操作都无效时,追加JVM参数关闭ND4J的OpenMP多线程优化,规避Catalina下线程本地存储调用的兼容问题:
    -Dorg.nd4j.parallel.enabled=false
    

内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:15:38