相关疑难解决方法(0)

Java程序会崩溃吗?

我是一名c ++程序员,我对Java知之甚少.我知道java程序员不必像C++一样直接使用内存.我也知道C++应用程序中的大多数崩溃都是由于内存损坏造成的.

因为与内存相关的问题,用Java编写的应用程序是否会崩溃?

谢谢

c++ java crash

26
推荐指数
3
解决办法
3680
查看次数

JVM OutOfMemory错误"死亡螺旋"(不是内存泄漏)

我们最近一直在将许多应用程序从RedHat linux JDK1.6.0_03下运行到Solaris 10u8 JDK1.6.0_16(更高规格的机器),我们注意到了一个相当紧迫的问题:在某些负载下我们的JVM获得他们自己变成了"死亡螺旋"并最终失去了记忆.注意事项:

  • 不是内存泄漏的情况.这些应用程序运行得很好(在一种情况下超过3年),并且在任何情况下都不确定内存不足错误.有时应用程序有效,有时则不然
  • 不是我们转向64位虚拟机 - 我们仍在运行32位
  • 在一个案例中,在1.6.0_18上使用最新的G1垃圾收集器似乎已经解决了这个问题.在另一个方面,回到1.6.0_03已经奏效
  • 有时我们的应用程序会因HotSpot SIGSEGV错误而崩溃
  • 这会影响用Java和Scala编写的应用程序

最重要的一点是:行为表现在那些突然获得大量数据的应用程序中(通常通过TCP).好像VM决定继续添加更多数据(可能会将其推进到TG),而不是在"新闻空间"上运行GC,直到它意识到它必须执行完整的GC,然后尽管VM中的所有内容都是垃圾,它以某种方式决定不收集它!

这听起来很疯狂,但我只是看不出它是什么.你怎么能解释一个应用程序哪一分钟落在最大堆1Gb和下一个工作正常(当应用程序完全相同的事情时永远不会大约256M )

所以我的问题是:

  1. 还有其他人观察过这种行为吗?
  2. 有任何关于我如何调试JVM本身(与我的应用程序相对)的建议吗?我如何证明这是一个VM问题?
  3. 是否有任何虚拟机专家论坛,我可以向VM的作者询问(假设他们不在SO上)?(我们没有支持合同)
  4. 如果这是VM最新版本中的一个错误,为什么其他人没有注意到它呢?

java jvm solaris scala out-of-memory

19
推荐指数
1
解决办法
5360
查看次数

Sun JVM(JRE jre1.6.0_24)段错误NET_Read

我们的JVM在生产过程中不时会出现分段故障,感觉就像是某种竞争条件.

设置重现: - Linux上的JRE jre1.6.0_24 Ubuntu 9.10和Debian 4.x 64位多核AMD - Apache tomcat 6.0.24 ... 6.0.32

用fastdebug重新编译java会重现问题(这个gcc -g1).但是,它不会产生比我们在这里有更多有用的信息.

使用debug重新编译java不会重现问题(这是gcc -g加上可能的一些-DSOMETHING代码调试标志).

任何帮助试图解决这个问题的人都会非常感激.

使用Oracle的1.6.0_24 jdk生成的核心文件.gdb出现了:

    Program terminated with signal 11, Segmentation fault.
    #0  0x00002aaab7b10666 in NET_Read () from
    /usr/local/jdk1.6.0_24/jre/lib/amd64/libnet.so
Run Code Online (Sandbox Code Playgroud)

好的,所以我的装配真的很生锈.记住这一点:

    (gdb) info frame
    Stack level 0, frame at 0x4b3e0040:
     rip = 0x2aaab7b10666 in NET_Read; saved rip 0x2aaab7b0d53b
     called by frame at 0x4b3f0090
             Arglist at 0x4b3dffc8, args:
     Locals at 0x4b3dffc8, Previous frame's sp is 0x4b3e0040
     Saved registers:
     rbx at 0x4b3e0008, rbp at 0x4b3e0010, r12 …
Run Code Online (Sandbox Code Playgroud)

java sockets jvm segmentation-fault

16
推荐指数
1
解决办法
2803
查看次数

如何在Linux上调试本机Java崩溃?

我已经看到了这个问题以及关于如何调试本机Java崩溃的这篇文章.这篇文章是关于Windows的.在Linux上有哪些等效的调试帮助?

注意:我所拥有的只是该字段中用户的崩溃日志.我无法访问发生崩溃的机器.

更新:我很确定崩溃是由于我们拥有的JNI代码.我从来没有打算暗示JVM本身是错误的.

每个请求,这里是崩溃转储(或者它适合30K stackoverflow限制):

#
# An unexpected error has been detected by Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x06300e76, pid=9983, tid=4106996592
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0_03-b05 mixed mode, sharing)
# Problematic frame:
# V  [libjvm.so+0x300e76]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x0922e000):  VMThread [id=9985]

siginfo:si_signo=11, si_errno=0, si_code=1, …

java linux debugging jvm

15
推荐指数
1
解决办法
9206
查看次数

在Solaris上没有创建hs_err_pid.log文件并从jvm转储核心

问题描述

经过一段时间运行我的Java服务器应用程序后,我在Solaris上遇到了Oracle Java虚拟机的奇怪行为.通常,当jvm hs_err_pid.log文件发生崩溃时(位置由-XX:ErrorFilejvm参数确定,如下所述:如何禁止创建hs_err_pid文件?

但在我的情况下,文件没有创建,唯一剩下的是core核心转储文件.

使用pstackpflags标准的Solaris工具,我能够从core文件中收集有关崩溃的更多信息(包含在下面).

试过的解决方案

  • 试图找到hs_err_pid.log整个文件系统中的所有文件,但找不到任何文件(甚至在应用程序工作目录之外).即:

    find / -name "hs_err_pid*"

  • 我试图找到与jvm相关的jvm错误,但我找不到类似于这种情况的有趣内容.

  • 问题看起来有点类似于:Java VM:1.6.0_17和1.6.0_18都可重现SIGSEGV,如何报告?但我仍然无法确认这一点,因为hs_err_pid.log文件丢失了,当然OS平台也不同了.
  • (编辑)正如在分析java核心转储问题的工具的答案之一中所建议的那样,我已经从core文件中提取了堆转储jmap并使用Eclipse MAT进行了分析.我发现了一个泄漏(添加到HashMap的元素,在核心转储1,4 M元素时永远不会被清除).然而,这并不能解释为什么hs_err_pid.log没有生成文件,也没有jvm崩溃.
  • (EDIT2) 正如Darryl Miles所建议的那样,-Xmx限制已被检查(测试包含的代码无限期地将对象添加到a 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创建文件)?

解决这个问题的任何提示或指针都会非常有用.

提取的标志 …

java jvm solaris segmentation-fault jvm-crash

6
推荐指数
1
解决办法
2万
查看次数