开发者社区> 问答> 正文

当在Docker容器中运行时,高I / O Java进程始终在JavaThread中获得信号11 SIGSEGV

k8s小能手 2019-01-09 14:31:02 487

有没有人能够使用不同的硬件和不同的JRE版本在JRE上一致地复制SIGSEGV?注意(可能很重要):我在Kubernetes上部署的Docker容器中运行该进程。

示例错误:

A fatal error has been detected by the Java Runtime Environment:

SIGSEGV (0xb) at pc=0x00007fea64dd9d01, pid=21, tid=0x00007fe8dfbfb700

JRE version: Java(TM) SE Runtime Environment (8.0_191-b12) (build 1.8.0_191-b12)

Java VM: Java HotSpot(TM) 64-Bit Server VM (25.191-b12 mixed mode linux-amd64 compressed oops)

Problematic frame:

J 8706 C2 com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextFieldName()Ljava/lang/String; (493 bytes) @ 0x00007fea64dd9d01 [0x00007fea64dd9b60+0x1a1]

我目前正在管理一个高I / O流程,其中包含许多执行I / O和序列化的线程:下载CSV和JSON,读取CSV,将JSON写入CSV,以及将CSV加载到MySQL中。在应用程序的运行周期中,我这样做了数千次。我只使用常用的库(Jackson,jOOQ)和“普通”代码:具体来说,我没有编写使用JNI的自定义代码。

没有失败,JVM将在每个运行周期中使用SIGSEGV。似乎SIGSERV在代码库的各个部分,但从来没有在GC线程或任何其他众所周知的线程。“有问题的框架”始终是编译代码。

测试规格:

AWS中的多个不同硬件实例。
使用Java 8 191和181进行测试.Ubuntu 16.04。
此过程在容器(Docker)中运行并部署在Kubernetes上。
Docker版本: 17.03.2-ce

JSON Kubernetes Ubuntu Java 关系型数据库 MySQL 数据格式 Docker 容器
分享到
取消 提交回答
全部回答(1)
  • k8s小能手
    2019-07-17 23:25:00

    Memory: 4k page, physical 33554432k(1020k free), swap 0k(0k free)
    在32 GB中,崩溃时只有1 MB是免费的。由于系统内存不足,很可能该进程被终止。我建议:

    显着减少堆大小。例如2 - 8 GB
    增加可用内存。例如4 - 16 GB
    添加一些交换空间。例如8 - 32 GB,这不能解决问题,但可以更优雅地处理完整内存。

    0 0
+ 订阅

云原生时代,是开发者最好的时代

推荐文章
相似问题