首页 > 解决方案 > SIGSEGV 在 cv::_OutputArray::create at libopencv_java342.so 上频繁导致 JVM 崩溃

问题描述

我经常遇到 JVM 崩溃。将 opencv 与 Java Imgproc 库一起使用。它从 Imgproc 库的 findContours 函数中调用。

堆栈:[0x00007febe3875000,0x00007febe38f6000],sp=0x00007febe38f3ea0,可用空间=507k 本机帧:(J=编译的 Java 代码,j=解释,Vv=VM 代码,C=本机代码)C [libopencv_java342.so+0x4a63f4] cv: :_OutputArray::create(int, int const*, int, int, bool, int) const+0x1b4

Java 帧:(J=编译的 Java 代码,j=解释的,Vv=VM 代码)J 103505 org.opencv.imgproc.Imgproc.findContours_1(JJJII)V (0 bytes) @ 0x00007fecec55770e [0x00007fecec5576c0+0x4e]

致命错误 :

Java 运行时环境检测到一个致命错误:

SIGSEGV (0xb) 在 pc=0x00007febd82453f4,pid=3462,tid=0x00007febe38f5700

JRE 版本:Java(TM) SE 运行时环境 (8.0_141-b15) (build 1.8.0_141-b15) Java VM:Java HotSpot(TM) 64-Bit Server VM (25.141-b15 混合模式 linux-amd64 压缩 oops) 有问题框架:C [libopencv_java342.so+0x4a63f4] cv::_OutputArray::create(int, int const*, int, int, bool, int) const+0x1b4

无法写入核心转储。核心转储已被禁用。要启用核心转储,请在再次启动 Java 之前尝试“ulimit -c unlimited”

额外细节 :

尝试调整 JVM 内存但没有帮助。任何帮助,将不胜感激。

我们正在使用Imgproc JAVA 库,它在下面使用 libopencv_java342.so。操作系统为 Amazon Linux AMI VERSION="2018.03 (基于 rhel fedora)

opencv 的下面函数是从库中调用的。

private static native void findContours(long image_nativeObj, long contours_mat_nativeObj, long hierarchy_nativeObj, int mode, int method);

标签: javaopencvjvmopencv-contourjvm-crash

解决方案


推荐阅读