docker环境javacv运行时环境检测到致命错误:SIGSEGV(0xb)

分析JVM致命错误日志hs_err_pid.log

当jvm出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导致crash的根源,从而改善以保证系统稳定。当出现crash时,该文件默认会生成到工作目录下,然而可以通过jvm参数指定生成路径

日志头文件

日志头文件包含概要信息,简述了导致crash的原因。而导致crash的原因很多,常见的原因有jvm自身的bug,应用程序错误,jvm参数配置不当,服务器资源不足,jni调用错误等。

现在参考下如下描述:

 #
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007fb8b18fdc6c, pid=191899, tid=140417770411776
#
# JRE version: Java(TM) SE Runtime Environment (7.0_55-b13) (build 1.7.0_55-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.55-b03 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# J  org.apache.http.impl.cookie.BestMatchSpec.formatCookies(Ljava/util/List;)Ljava/util/List;
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#

由于项目在本地windows和linux直接运行都是正常的并没有报错,而使用docker运行打包镜像发布运行就会报错。

解决方法:

jvm启动参数

再下面是jvm启动参数信息:

VM Arguments:
jvm_args: -Djava.util.logging.config.file=/home/service/tomcat7007-account-web/conf/logging.properties -Xmx4096m -Xms4096m -Xmn2560m -XX:SurvivorRatio=6 -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/home/work/webdata/logs/tomcat7007-account-web/develop/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/work/webdata/logs/tomcat7007-account-web/develop/ -Dtomcatlogdir=/home/work/webdata/logs/tomcat7007-account-web/develop -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7407 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.endorsed.dirs=/home/service/tomcat7007-account-web/endorsed -Dcatalina.base=/home/service/tomcat7007-account-web -Dcatalina.home=/home/service/tomcat7007-account-web -Djava.io.tmpdir=/home/service/tomcat7007-account-web/temp 
java_command: org.apache.catalina.startup.Bootstrap start
Launcher Type: SUN_STANDARD
 
Environment Variables:
JAVA_HOME=/home/service/jdk1.7.0_55
PATH=/opt/zabbix/bin:/opt/zabbix/sbin:/home/service/jdk1.7.0_55/bin:/home/work/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/work/bin
SHELL=/bin/bash

修改jvm启动参数-XX:+UseParallelGC -Xmx512m,看是不是内存服务器分配内存过小导致运行直接崩溃。

如果改大参数之后还是报错,可能需要看javacv版本和OpenCV版本是否兼容,这里自己由于javacv内部封装全部OpenCV相关包太多,所以只使用剔除了一些不需要的依赖包从打包1个g直接变成100mb:

<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv</artifactId>
    <version>1.5.2</version>
</dependency>
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacpp</artifactId>
    <version>1.5.2</version>
</dependency>

<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>opencv</artifactId>
    <version>4.1.2-1.5.2</version>
    <classifier>windows-x86_64</classifier>
</dependency>
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>openblas</artifactId>
    <version>0.3.7-1.5.2</version>
    <classifier>windows-x86_64</classifier>
</dependency>
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>ffmpeg</artifactId>
    <version>4.2.1-1.5.2</version>
    <classifier>windows-x86_64</classifier>
</dependency>


<dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>opencv</artifactId>
            <version>4.1.2-1.5.2</version>
            <classifier>linux-x86_64</classifier>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>openblas</artifactId>
            <version>0.3.7-1.5.2</version>
            <classifier>linux-x86_64</classifier>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>ffmpeg</artifactId>
            <version>4.2.1-1.5.2</version>
            <classifier>linux-x86_64</classifier>
        </dependency>

后边去docker打包镜像发布发现还是会报同样的错误,只能去看打包镜像jdk版本了

发现由于docker打包镜像使用的是基础镜像

FROM java:8-jre-alpine

因为这个基础镜像是基于Alpine的,但是javacv需要使用使用 glibc 的 OpenJDK 版本。

将版本替换成下面的版本就完美解决!!!!

可以正常使用javacv去处理操作

openjdk:8u222-slim镜像的jdk版本(可以)

# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

如果绝对需要使用该版本的 OpenJDK,则需要从不使用 glibc 的源代码进行重建(处理起来比较麻烦可能还会有别的一些问题产生):
https://github.com/bytedeco/javacpp-预设/#build-instructions

  • 26
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用Docker部署Java环境可以简化打包和部署Java应用程序的过程。通过创建一个Dockerfile和运行容器,我们可以将Java应用程序快速部署在任何地方。 首先,我们需要编写一个Dockerfile来描述我们的Java环境。在Dockerfile中,我们可以指定基础镜像,安装Java运行时环境,并将我们的Java应用程序复制到容器中。可以使用以下命令来构建镜像: ``` docker build -t manage-admin.jar . ``` 这个命令会根据Dockerfile和当前目录中的jar包构建一个名为manage-admin.jar的镜像。请注意,末尾的点表示Dockerfile和jar包在同一级目录中。 一旦镜像构建完成,我们可以使用以下命令来运行容器: ``` docker run -d manage-admin.jar ``` 这个命令会在后台运行一个名为manage-admin.jar的容器,并启动我们的Java应用程序。 通过使用Docker,我们可以轻松地打包和部署Java应用程序,使其在不同的环境中运行。这样可以提高应用程序的可移植性和可靠性,并简化部署过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker 部署java环境](https://download.csdn.net/download/qq_33411322/10453502)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [用Docker部署Java项目](https://blog.csdn.net/m0_53464000/article/details/129799609)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [docker 安装java开发环境 部署jar](https://blog.csdn.net/m0_54019942/article/details/130429655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值