有没有人能够使用不同的硬件和不同的JRE版本在JRE上一致地复制SIGSEGV?注意(可能很重要):我在Kubernetes上部署的Docker容器中运行该进程。
示例错误:
我目前正在管理一个高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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Memory: 4k page, physical 33554432k(1020k free), swap 0k(0k free)
在32 GB中,崩溃时只有1 MB是免费的。由于系统内存不足,很可能该进程被终止。我建议:
显着减少堆大小。例如2 - 8 GB
增加可用内存。例如4 - 16 GB
添加一些交换空间。例如8 - 32 GB,这不能解决问题,但可以更优雅地处理完整内存。
你好,我是AI助理
可以解答问题、推荐解决方案等
评论
全部评论 (0)