Java 应用程序崩溃

标签 java multithreading serialization parallel-processing jvm-crash

我一直在开发大型 Java 应用程序。它是相当并行的,并且使用了几个固定的线程池(每个线程池有 8 个线程)。我在一台有 2 个内核的计算机上运行它,每个内核有 4 个处理器。我的程序正在分析大量数据,并且在每组之后保存(序列化)分析,尽管它跨数据集工作,因此每次运行新数据时都会重新加载(然后保存)。 我的问题是:在运行 4-5 个数据集后(大约需要 2 天,我对我的编码效率非常满意)它会崩溃,在第 5 个数据集(无论哪个数据集)上运行完全相同的时间后我用)。该程序是重复的,因此此时代码中没有任何新内容。它是可重现的,我不知道该怎么做。如果有帮助,我可以发布完整的错误日志...我知道这个问题在没有更多详细信息的情况下是模棱两可的,但是如果有任何可行的建议,我们将不胜感激。

我一直在测试不同的设置以查看是否有任何帮助,现在我正在运行以下参数。

-Xmx6g -Xmx12g -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC

谢谢, 乔

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x0000000000000000, pid=18454, tid=140120548144896
#
# JRE version: 7.0_03-b147
# Java VM: OpenJDK 64-Bit Server VM (22.0-b10 mixed mode linux-amd64 compressed oops)
# Derivative: IcedTea7 2.1.1pre
# Distribution: Ubuntu precise (development branch), package 7~u3-2.1.1~pre1-1ubuntu2
# Problematic frame:
# C  0x0000000000000000
#
# 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 include
# instructions on how to reproduce the bug and visit:
#   https://bugs.launchpad.net/ubuntu/+source/openjdk-7/
#

最佳答案

只是一个艰难的猜测......

可能是无法创建更多文件

如果你在 linux 中运行这个尝试运行

ulimit -c unlimited

在你运行你的 java 程序之前......这应该在两个方面有所帮助

  1. 应该增加文件创建限制
  2. 如果发生任何错误,它将创建核心转储。

查看程序运行时使用了多少文件 IO。

关于Java 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314312/

相关文章:

java - 即将被收集时如何获取java对象本身

java - 等待主线程,直到 Java 中的多个线程之一发出信号

C/Linux - 服务器 <-> 与命名管道的终端通信

java - 如何将 JOptionPane.showMessageDialog 置于屏幕中央?

java - 获取 ruby​​ 的 "RSA/ECB/OAEPWithSHA-256AndMGF1Padding"组合

c++ - 经典的生产者消费者线程

java - 有没有办法序列化方法调用

javascript - 如何在使用 ajax 时将 javascript 对象传递给 PHP 文件

c# - XmlSerializer 将 float 序列化为 1E+07

java - 如何获取csv文件中每个字段的最大长度?