4

我一直在研究一个大的Java应用程序。它非常平行,并且使用了几个fixedThreadPools(每个都有8个线程)。我在一台有2个内核的计算机上运行它,每个内核有4个处理器。我的程序正在分析大量的数据,并且每次设置后都会保存(序列化)分析,尽管它可以跨数据集使用,并且每次运行一个新的(然后保存)时都会重新加载。 我的问题是:在运行4-5个数据集(大约需要2天,我对编码效率非常满意)之后,它会在第五组完全相同的时间量之后崩溃(不管哪些数据设置我使用)。该程序是重复性的,因此目前代码中没有新的内容。它是可重复的,我不知道该怎么做。我可以发布完整的错误日志,如果这可以帮助...我明白,这个问题是不明确的,没有更多的详细信息,但如果有任何指导意见,将不胜感激。Java应用程序崩溃

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

-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/ 
# 
+2

也许-XX:+ UnlockExperimentalVMOptions -XX:+ UseG1GC不是这么好的diea? – bmargulies

+0

如果可能的话,我会考虑升级你的java版本。如果您的代码真的可重复,您也可以考虑使用您的代码向Sun/Oracle提交错误。 – Gray

+0

我有使用G1收集器的JVM崩溃 –

回答

1

我会用类似Visual VM的东西来测试它。它会在您的应用程序运行时实时显示内存,线程,CPU,创建的对象等等发生了什么。

我拥有的漂亮版本仅适用于Oracle/Sun JVM。有一个与JDK一起发布,但我不相信它会显示与安装了所有插件的版本1.6.3相同的详细信息。

+0

谢谢,这看起来非常有用。 – JoeC

3

只是一个硬猜测...

可能是它不能创建更多文件

如果您在linux中运行此尝试运行

ulimit -c unlimited 

在运行Java程序...这将有助于在两个方面

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

查看在程序运行时它使用多少个文​​件IO。

+0

谢谢,我会试试这个。 – JoeC

0

只需在eclipse.ini文件中添加-Dorg.eclipse.swt.browser.DefaultType = mozilla即可。