开发者社区 > 云原生 > 容器服务 > 正文

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

有没有人能够使用不同的硬件和不同的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

展开
收起
k8s小能手 2019-01-09 14:31:02 2495 0
1 条回答
写回答
取消 提交回答
  • 整合最优质的专家资源和技术资料,问答解疑

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

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

    2019-07-17 23:25:00
    赞同 展开评论 打赏

国内唯一 Forrester 公共云容器平台领导者象限。

相关电子书

更多
阿里云文件存储 NAS 在容器场景的最佳实践 立即下载
何种数据存储才能助力容器计算 立即下载
《容器网络文件系统CNFS》 立即下载