我有一个Java应用程序,有一半时间只是挂起,另一半JVM崩溃.有没有一种工具可以用来查看发生了什么事情让它挂起和/或崩溃?我正在使用CentOS 5.6
我有一个卡尺基准(1.0-beta-2):
import com.google.caliper.Benchmark;
import com.google.caliper.runner.CaliperMain;
public class MyBenchmark {
@Benchmark public int a(int rep) {
return 0;
}
public static void main(String[] args) {
CaliperMain.main(MyBenchmark.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
我从eclipse或命令行运行它:
mvn exec:java -Dexec.mainClass="com.google.caliper.runner.CaliperMain" -Dexec.args="MyBenchmark"
Run Code Online (Sandbox Code Playgroud)
在这两种情况下我都有一个错误:
ERROR: Trial failed to complete (its results will not be included in the run):
The worker exited without producing data. It has likely crashed. Inspect /tmp/1427055470061-0/trial-1.log to see any worker output.
Run Code Online (Sandbox Code Playgroud)
在这个文件中,我看到:
Trial Number: 1
Trial Id: d663a0b5-55b4-43c3-97d8-93f14f436342
Experiment: {instrument=allocation, benchmarkMethod=a, vm=default, parameters={}}
[stderr] CICompilerCount of …Run Code Online (Sandbox Code Playgroud) 除了堆转储之外java 6还生成线程转储(java_pid14941.hprof)
这是我的一个应用程序发生的事情.
java.lang.OutOfMemoryError:超出GC开销限制将堆转储到java_pid14941.hprof ...
我确实在工作目录中找到了ava_pid14941.hprof,但没有找到任何包含线程转储的文件.当我得到这个OutOfMemory错误时,我需要知道所有线程正在做什么.
是否有任何配置选项除了内存异常外的堆转储外还会产生线程转储?
我正在使用用C编写的Windows启动程序启动我的Java软件.它基本上加载了jvm.dll并使用它来初始化JVM而不使用javaw.
现在,我尝试在64位上编译它,并从64位Java安装加载正确的jvm.dll.
现在,Java程序启动了,但是与hs_err_pid文件崩溃了.好像AWT正在崩溃.
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (os_windows_x86.cpp:149), pid=8812, tid=10816
# guarantee(result == EXCEPTION_CONTINUE_EXECUTION) failed: Unexpected result from topLevelExceptionFilter
#
# JRE version: 7.0_10-b18
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.6-b04 mixed mode windows-amd64 compressed oops)
# 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 …Run Code Online (Sandbox Code Playgroud) 我需要查看2个死锁线程的堆栈来分析情况.现在JVM是现场直播,数据就在那里,但是我需要某种工具来从流程中提取它.我只关心类型堆栈中的6个变量String.任何想法都非常感谢.JVM版本6_35,它是a linux,JMX已启用,但我没有profiler/debugger配置连接.重现起来非常困难.
以下日志文件导致JVM崩溃.
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f60ddce2058, pid=117268, tid=140052313204480
#
# JRE version: Java(TM) SE Runtime Environment (7.0_51-b13) (build 1.7.0_51-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libzip.so+0x5058] ZIP_GetEntry+0x78
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again …Run Code Online (Sandbox Code Playgroud) 我们遇到以下问题:在我们的某些 Linux机器上,使用特洛伊库和G1 GC的Java应用程序将使用以下类型的消息快速崩溃:
A fatal error has been detected by the Java Runtime Environment:
SIGSEGV (0xb) at pc=0x00002aaaaaef81d1, pid=31063, tid=1141000512
JRE version: 6.0_29-b11
Java VM: Java HotSpot(TM) 64-Bit Server VM (20.4-b02 mixed mode linux-amd64 )
Problematic frame:
J gnu.trove.impl.hash.TObjectHash.insertKey(Ljava/lang/Object;)I
Run Code Online (Sandbox Code Playgroud)
这里让我感到震惊的是有问题的框架,它总是一样的.我习惯了这里出现的一些库,但从来没有使用Java代码.奇怪的是,一些应该具有相同设置的机器不会受到影响.在Windows上,我也从未见过这个.最近的Java 7版本仍然存在这个问题.从G1 GC切换到任何其他GC会立即解决问题.我们使用由Maven解决的特洛伊库,在那里尝试了几个版本,包括3.0.3 - 总是同样的问题.
有谁知道这可能是什么原因?任何已知的G1 GC错误?是否以特殊的方式编译了特洛伊,这可能会造成这个问题?
更新:不同的应用程序,不同的服务器,最新的Java(7u5),类似的问题:
A fatal error has been detected by the Java Runtime Environment:
SIGSEGV (0xb) at pc=0x00002aadb7a38093, pid=14100, tid=46925573367184
JRE version: 7.0_05-b05
Java VM: Java HotSpot(TM) 64-Bit Server VM (23.1-b03 mixed mode linux-amd64 compressed …Run Code Online (Sandbox Code Playgroud) 我在VPS上有tomcat web应用程序,tomcat有时(大约每月一次)在catalina.out中崩溃并出现以下错误:
Java HotSpot(TM)64位服务器VM警告:异常java.lang.OutOfMemoryError发生将调度信号SIGTERM发送到处理程序 - 可能需要强制终止VM.
以下是我的配置的一些细节:
VPS:debian-5.0-x86_64
RAM:2.5 gb,
虚拟处理器:8
硬盘:60GB硬盘 - 70%免费
Tomcat 7.0
java -version:
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze1)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
Run Code Online (Sandbox Code Playgroud)Java参数:-Xms512m -Xmx1024m
我在该服务器上也有Apache-PHP.
我正在使用Munin监视服务器负载,它向我显示内存和CPU使用率始终稳定,并且在崩溃之前没有任何增加.
我也通过java.lang.Runtime类记录java内存使用情况,它显示jvm总是使用max200Mb内存并且在崩溃之前没有增加.崩溃前的最后一个日志是40秒前,那个时间使用的内存是:152Mb.
我的Web应用程序还运行6-7个线程,用于从不同的公共API收集数据.这些线程在tomcat启动时启动,并且它们始终以定期休眠运行.
你能告诉我它崩溃的原因吗?我怎么才能找到原因?
我有一个没有核心转储的致命错误日志,需要确定原因.这是.log文件中的堆栈:
# Problematic frame:
# C [libc.so.6+0x7b4bb] memcpy+0x15b
Run Code Online (Sandbox Code Playgroud)
{...}
Stack: [0x00002ac8c4d2c000,0x00002ac8c4e2d000], sp=0x00002ac8c4e28ef8, free space=1011k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libc.so.6+0x7b4bb] memcpy+0x15b
C [libzip.so+0x50b0] ZIP_GetEntry+0xd0
C [libzip.so+0x3eed] Java_java_util_zip_ZipFile_getEntry+0xad
J 28 java.util.zip.ZipFile.getEntry(J[BZ)J (0 bytes) @ 0x00002ac8acf404ee [0x00002ac8acf40420+0xce]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J 28 java.util.zip.ZipFile.getEntry(J[BZ)J (0 bytes) @ 0x00002ac8acf40478 [0x00002ac8acf40420+0x58]
J 33 C2 java.util.zip.ZipFile.getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry; (86 bytes) @ 0x00002ac8acf45548 [0x00002ac8acf45480+0xc8]
J 58 C2 java.util.jar.JarFile.getJarEntry(Ljava/lang/String;)Ljava/util/jar/JarEntry; (9 bytes) @ 0x00002ac8acf4e828 [0x00002ac8acf4e7e0+0x48]
J 44 C2 sun.misc.URLClassPath$JarLoader.getResource(Ljava/lang/String;Z)Lsun/misc/Resource; (91 …Run Code Online (Sandbox Code Playgroud) 在运行java应用程序时,我得到以下内存转储.
安装java 8后(java 7应用程序之前正在运行)我开始收到以下错误.
我正在使用16 GB RAM,在我检查时(在应用程序启动时)任务管理器中,大约6 GB RAM是免费的.
有人可以帮助解决问题吗?
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 472736 bytes for Chunk::new
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if …Run Code Online (Sandbox Code Playgroud)