下面是hs_err_pid.log的异常信息
# SIGSEGV (0xb) at pc=0x00007f399ca531ff, pid=4843, tid=0x00007f399dfa3700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_161-b12) (build 1.8.0_161-b12)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.161-b12 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libavutil.so.55+0x101ff] av_strstart+0x1f
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
具体停止的线程是
Stack: [0x00007f399df23000,0x00007f399dfa4000], sp=0x00007f399dfa0cc8, free space=503k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libavutil.so.55+0x101ff] av_strstart+0x1f
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j org.bytedeco.javacpp.avformat.avformat_open_input(Lorg/bytedeco/javacpp/avformat$AVFormatContext;Ljava/lang/String;Lorg/bytedeco/javacpp/avformat$AVInputFormat;Lorg/bytedeco/javacpp/avutil$AVDictionary;)I+0
j org.bytedeco.javacv.FFmpegFrameGrabber.startUnsafe()V+652
j org.bytedeco.javacv.FFmpegFrameGrabber.start()V+6
。。。。。
异常发生的时候,堆状况:
Heap:
par new generation total 2073600K, used 229593K [0x00000005c0000000, 0x000000064ca00000, 0x000000064ca00000)
eden space 1843200K, 11% used [0x00000005c0000000, 0x00000005cca2d470, 0x0000000630800000)
from space 230400K, 9% used [0x0000000630800000, 0x0000000631e08fa0, 0x000000063e900000)
to space 230400K, 0% used [0x000000063e900000, 0x000000063e900000, 0x000000064ca00000)
concurrent mark-sweep generation total 6084608K, used 0K [0x000000064ca00000, 0x00000007c0000000, 0x00000007c0000000)
Metaspace used 30952K, capacity 31516K, committed 31728K, reserved 1077248K
class space used 3623K, capacity 3799K, committed 3880K, reserved 1048576K
最开始在centos跑这个服务的时候,一段时间报错OOM,物理内存不够。。然后我加了6个G内存,跑了一周jvm崩了。。来个大神救救我啊QAQ
我也遇到了类似的问题,应该不是内存的问题,是依赖的问题。
同样的包我找了四台电脑测试,只有一台电脑会出错,然后我换了一套javacv的依赖就没得问题了
<p>从线程反馈的信息,是停止在avformat_open_input这个方法,此时第一感觉是打开了一个超过内存大小的文件,然后看堆栈信息,新生代三个区都很空闲,大概总量2G,文件是否超过2G?导致没有放到新生代,直接放到永久代了?如果排除,下面元存储和类空间都比较小,而且几乎占满了,可以考虑增加类空间和元存储的大小,需要注意的是元存储是直接使用得jvm外的剩余内存,如果不够,也会OOM</p>
回复 <a class="referer" target="_blank">@尚浩宇</a> : thanks
回复 <a class="referer" target="_blank">@菩提树下的猫</a> : 先试着增大永久代内存,比如512M
看样子是不是javacpp的classloader引用过多,没有释放,导致永久代内存溢出了呢?这个问题该怎么解决呢
<p>请问楼主解决了吗</p>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。