问题描述
经过一段时间运行我的Java服务器应用程序后,我在Solaris上遇到了Oracle Java虚拟机的奇怪行为.通常,当jvm hs_err_pid.log文件发生崩溃时(位置由-XX:ErrorFilejvm参数确定,如下所述:如何禁止创建hs_err_pid文件?
但在我的情况下,文件没有创建,唯一剩下的是core核心转储文件.
使用pstack和pflags标准的Solaris工具,我能够从core文件中收集有关崩溃的更多信息(包含在下面).
试过的解决方案
试图找到hs_err_pid.log整个文件系统中的所有文件,但找不到任何文件(甚至在应用程序工作目录之外).即:
find / -name "hs_err_pid*"
我试图找到与jvm相关的jvm错误,但我找不到类似于这种情况的有趣内容.
hs_err_pid.log文件丢失了,当然OS平台也不同了.core文件中提取了堆转储jmap并使用Eclipse MAT进行了分析.我发现了一个泄漏(添加到HashMap的元素,在核心转储1,4 M元素时永远不会被清除).然而,这并不能解释为什么hs_err_pid.log没有生成文件,也没有jvm崩溃.LinkedList):
java -Xmx1444m Test结果java.lang.OutOfMemoryError: Java heap space,java -Xmx2048m Test结果java.lang.OutOfMemoryError: Java heap space,java -Xmx3600m Test 核心转储的结果.这个问题
有没有人遇到类似jvm的问题,如何在这种情况下继续查找实际发生的事情(即在什么情况下核心从jvm转储而没有hs_err_pid.log创建文件)?
解决这个问题的任何提示或指针都会非常有用.
提取的标志 …
无论如何在JVM崩溃时生成核心/堆转储文件?由于这些文件通常非常有助于找出代码中的错误.任何帮助表示赞赏.
程
我们在我们自己的测试工具(基于 Java 的)中运行我们的测试集......随机测试失败......我们得到以下 JVM 失败错误......请帮助......
A fatal error has been detected by the Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006a0d5422, pid=7560, tid=2052
JRE version: 7.0_06-b24
Java VM: Java HotSpot(TM) 64-Bit Server VM (23.2-b09 mixed mode windows-amd64 compressed oops)
Problematic frame:
V [jvm.dll+0x25422]
Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
If you would like to submit a bug report, please visit:
http://bugreport.sun.com/bugreport/crash.jsp
--------------- T H R E A D ---------------
Current thread …Run Code Online (Sandbox Code Playgroud) 我遇到了一个关键问题。在 Java RCP 应用程序(桌面)上工作,该应用程序经常在我的机器上(而不是在我同事的机器上)崩溃。
我将 xmx 和 xms 设置为我的同事应用程序的配置,我在内存上运行诊断程序,但应用程序仍然崩溃。
根据内存诊断的图表,在崩溃的那一刻,非堆内存在增加(因为加载类的增加)。我同事电脑的内存比我机器上的内存好3倍左右。像在另一台机器上一样设置堆内存(xmx 和 xms)后,我怀疑存在堆内存问题(我使用的是最新版本的 java 8)。
有什么办法可以知道堆内存的限制吗?
ram的值对非堆内存有影响吗?
我正在编写与R交互的Java代码,其中"NA"值与NaN值区分开来.NA表示值"统计上缺失",即无法收集或无法获得.
class DoubleVector {
public static final double NA = Double.longBitsToDouble(0x7ff0000000001954L);
public static boolean isNA(double input) {
return Double.doubleToRawLongBits(input) == Double.doubleToRawLongBits(NA);
}
/// ...
}
Run Code Online (Sandbox Code Playgroud)
以下单元测试演示了NaN和NA之间的关系,并在我的Windows笔记本电脑上运行良好,但"isNA(NA)#2" 有时在我的ubuntu工作站上失败.
@Test
public void test() {
assertFalse("isNA(NaN) #1", DoubleVector.isNA(DoubleVector.NaN));
assertTrue("isNaN(NaN)", Double.isNaN(DoubleVector.NaN));
assertTrue("isNaN(NA)", Double.isNaN(DoubleVector.NA));
assertTrue("isNA(NA) #2", DoubleVector.isNA(DoubleVector.NA));
assertFalse("isNA(NaN)", DoubleVector.isNA(DoubleVector.NaN));
}
Run Code Online (Sandbox Code Playgroud)
从调试开始,看起来DoubleVector.NA被更改为规范的NaN值7ff8000000000000L,但很难分辨,因为将它打印到stdout会给出与调试器不同的值.
此外,如果测试在之前的许多其他测试之后运行,则测试仅失败; 如果我单独运行这个测试,它总是通过.
这是一个JVM错误吗?优化的副作用?
测试总是传递:
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
测试有时会失败:
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java …Run Code Online (Sandbox Code Playgroud) 我们的一个开发服务器时不时地崩溃,报告看起来非常相似.我们认为这是由于内存不足,但我们想验证这一点.你们能协助这个过程吗?您可以在下面找到hs_err文件中的相关信息.
谢谢!延亨默
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# SIGSEGV (0xb) at pc=0x00002b84b6dee37c, pid=4196, tid=1081399616
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (1.5.0_22-b03 mixed mode)
# Problematic frame:
# V [libjvm.so+0x5b437c]
#
--------------- T H R E A D ---------------
Current thread (0x000000005db44970): GCTaskThread [id=4200]
siginfo:si_signo=11, si_errno=0, si_code=128, si_addr=0x0000000000000000
Heap
PSYoungGen total 291968K, used 291760K [0x00002aaada600000, 0x00002aaaec400000, 0x00002aaaec400000)
eden space 291136K, 100% used [0x00002aaada600000,0x00002aaaec250000,0x00002aaaec250000)
from space 832K, 75% used [0x00002aaaec250000,0x00002aaaec2ec288,0x00002aaaec320000)
to …Run Code Online (Sandbox Code Playgroud) 我有一个巨大的应用程序在 glassfish 服务器中运行,它创建了许多短期对象,并且我在 JVM 中有以下 GC 配置。
-XX:+DisableExplicitGC
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:-UseAdaptiveSizePolicy
-XX:PermSize=256m
-XX:MaxPermSize=1024m
-Xms7g
-Xmx7g
-XX:NewRatio=2
Run Code Online (Sandbox Code Playgroud)
但 JVM 却因无限 GC 而挂起。我必须重新启动 JVM。我从 GC 日志中获取以下信息。
2.855: [GC 734029K->9736K(7034240K), 0.0133500 secs]
2.869: [Full GC 9736K->9501K(7034240K), 0.1043570 secs]
13.254: [GC 681231K->26506K(7034240K), 0.0251050 secs]
13.280: [Full GC 26506K->26082K(7034240K), 0.2904930 secs]
13.589: [GC 103156K->26224K(7034240K), 0.0015940 secs]
13.590: [Full GC 26224K->24440K(7034240K), 0.2254710 secs]
35.478: [GC 1859512K->131673K(7034240K), 0.0781300 secs]
41.603: [GC 1966745K->351954K(7034240K), 0.1858590 secs]
46.012: [GC 2187026K->502362K(7034240K), 0.2329020 secs]
51.850: [GC 2337434K->608654K(7034240K), 0.2012410 secs]
72.584: [GC 2443726K->727923K(7034240K), …Run Code Online (Sandbox Code Playgroud) JVM不断崩溃.我无法弄清问题是什么.我测试了最新的1.6 jdk以及1.7.一样的问题.
我已经运行了内存检查,并且没有报告错误.我也试过jrockit,那里发生了同样的事情.java代码是一个索引过程,它将文档添加到Lucene索引中.将某些文档添加到索引并提交后,就会发生这种情况.
JVM与以下选项一样启动:
-XX:+UseConcMarkSweepGC -server -d64 -XX:MaxPermSize=1g -Xms4g -Xmx12g
Run Code Online (Sandbox Code Playgroud)
垃圾收集日志的输出(注意最后一行,好像jvm无法执行完整的gc):http://pastebin.com/9EskW4QY
崩溃报告如下所示:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f0db0736950, pid=11730, tid=139682413950736
#
# JRE version: 6.0_16-b01
# Java VM: Java HotSpot(TM) 64-Bit Server VM (14.2-b01 mixed mode linux-amd64 )
# Problematic frame:
# V [libjvm.so+0x548950]
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
--------------- T H R …Run Code Online (Sandbox Code Playgroud) 运行Grails应用程序时出现以下错误:
A fatal error has been detected by the Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6df13df3, pid=1516, tid=8592
JRE version: 7.0_05-b06
Java VM: Java HotSpot(TM) Server VM (23.1-b03 mixed mode windows-x86 )
Problematic frame:
V [jvm.dll+0x63df3]
Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
An error report file with more information is saved as:
E:\Workspace\opal\hs_err_pid1516.log
If you would like to submit a bug report, please visit:
http://bugreport.sun.com/bugreport/crash.jsp
Run Code Online (Sandbox Code Playgroud)
只有当我访问名为show.gsp的gsp页面时,才会出现此错误,该页面调用名为s2PublicTrainingLifecycleEdit.gsp的模板
以下是s2PublicTrainingLifecycleEdit.gsp页面的内容.
<script type="text/javascript">
$(document).ready(function(){ …Run Code Online (Sandbox Code Playgroud) 以下代码编译但导致a java.lang.VerifyError.即使未执行run()方法,也会发生错误.
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
public class TestCase {
public static void main(String[] args) {
new TestCase().run();
}
public void run() {
class Inner {
}
Map<String, Inner> map = new HashMap<>();
Function<String, Inner> function = (name) -> {
Inner i = map.get(name);
if (i == null) {
i = new Inner();
map.put(name, i);
}
return i;
};
function.apply("test");
}
}
Run Code Online (Sandbox Code Playgroud)
错误:
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
TestCase.lambda$0(Ljava/util/Map;Ljava/lang/String;)LTestCase$1Inner; …Run Code Online (Sandbox Code Playgroud)