OptaPy学校排课快速入门在M1 Mac Mini上运行崩溃求助
解决M1 Mac上OptaPy排课程序JVM崩溃(SIGBUS in CodeHeap::allocate)问题
问题背景
在M1芯片的Mac Mini上运行OptaPy学校排课快速入门程序时,JVM抛出致命错误:
# # A fatal error has been detected by the Java Runtime Environment: # # SIGBUS (0xa) at pc=0x00000001027fbe30, pid=2724, tid=259 # # JRE version: (20.0.1) (build ) # Java VM: OpenJDK 64-Bit Server VM (20.0.1, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-aarch64) # Problematic frame: # V [libjvm.dylib+0x367e30] CodeHeap::allocate(unsigned long)+0x1c0 #
同一设备上OptaPlanner快速入门程序可正常运行,排除基础JDK环境问题(使用brew安装的OpenJDK 20.0.1),程序在Windows/Ubuntu可正常运行。
解决方案
调整JVM代码堆相关参数
在运行OptaPy程序时添加以下JVM参数,缓解代码堆分配压力:-XX:ReservedCodeCacheSize=256m -XX:InitialCodeCacheSize=128m -XX:-TieredCompilation增大代码缓存预留空间,关闭分层编译,避免JIT编译时的内存分配冲突。
切换到LTS版本JDK
brew提供的OpenJDK 20(非LTS)在arm64架构下可能存在兼容性bug,建议切换到OpenJDK 17(LTS):brew install openjdk@17配置环境变量指向该版本(例如在
~/.zshrc中添加export PATH="/usr/local/opt/openjdk@17/bin:$PATH"),之后重新运行程序。匹配OptaPy与OptaPlanner版本
确保使用的OptaPy版本和当前正常运行的OptaPlanner版本完全一致,版本不匹配可能导致底层JVM交互异常。禁用压缩指针(备选)
如果上述方法无效,尝试关闭JVM的压缩指针特性:-XX:-UseCompressedOops -XX:-UseCompressedClassPointers错误信息中显示当前开启了这两个特性,部分场景下arm64架构与OptaPy的结合会触发内存访问错误。
内容的提问来源于stack exchange,提问作者Remo R
相关产品推荐
相关产品推荐

