`

jvm挂掉 ,查看报错信息

 
阅读更多

有一次服务器jvm crash,无任何异常信息。后来想想不对啊,除非是人为的将java的进程kill掉,要不然不可能没有错误日志的,后来突然想起上次价格行情做性能测 试时,当jvm crash掉之后,是在Tomcat下生成一个hs_err_pid**.log文件的,于是找到那个文件,下面是分析过程, 这个文件有几部分内容,首先是头部信息,头信息包含了出错的大体信息和位置。

01 #
02 # A fatal error has been detected by the Java Runtime Environment:
03 #
04 #  SIGSEGV (0xb) at pc=0x00002ad9817ab34e, pid=10344, tid=1083357504
05 #
06 # JRE version: 6.0_18-b07
07 # Java VM: Java HotSpot(TM) 64-Bit Server VM (16.0-b13 mixed mode linux-amd64 )
08 # Problematic frame:
09 # V  [libjvm.so+0x2de34e]
10 #
11 # If you would like to submit a bug report, please visit:
12 #   http://java.sun.com/webapps/bugreport/crash.jsp
13 #
 

 

     在这部分中,有三块内容需要我们注意,一是SIGSEGV是一个信号名称,表示这是一个建立CORE文件段的非法错 误; 二是指明了运行环境,jre版本以及jvm版本;三是最重要的信息,它指明了出错的地方,这里V表示一种frame type,这里是指vmframe,而中括号里则表示出错是在libjvm.so这个文件里,具体位置的偏移量为+号后面的数据。由这里可以知道这是由于 jvm自身运行错误导致。

 

        这个文件的第二部分则是当前处理的线程,或者说是当jvm crash时在运行的线程,详细内容如下:

 

01 ---------------  T H R E A D  ---------------
02  
03 Current thread (0x000000005d835000):  GCTaskThread [stack: 0x000000004082b000,0x000000004092c000] [id=10346]
04  
05 siginfo:si_signo=SIGSEGV: si_errno=0, si_code=128 (), si_addr=0x0000000000000000
06  
07 Registers:
08 RAX=0x0000000000000001, RBX=0x00002aaab9f2bdd0, RCX=0x00002aaaaea56eb8, RDX=0x000a000d003e0024
09 RSP=0x000000004092aed0, RBP=0x000000004092aef0, RSI=0x00002aaab9f2bdd0, RDI=0x000000005d883780
10 R8 =0x00002aaaaea56d80, R9 =0x0000000000000001, R10=0x00002ad981de7201, R11=0x00002ad981df46e0
11 R12=0x000000005d883780, R13=0x00002aaaaea56eb8, R14=0x00002aaaaea56eb8, R15=0x000000005d883780
12 RIP=0x00002ad9817ab34e, EFL=0x0000000000010202, CSGSFS=0x0000000000000033, ERR=0x0000000000000000
13   TRAPNO=0x000000000000000d
14  
15 Top of Stack: (sp=0x000000004092aed0)
16 0x000000004092aed0:   000000004092af00 00002ad9817ab3be
17 0x000000004092aee0:   00002aaab9f2bdd0 00002aaab9f2bdd0
 

 

         这里只要第一行即可,这一行指明了,当crash时,程序正在运行垃圾回收线程,所以有理由怀疑是垃圾回收出了问题,然后这个文件就指引我们来到了第三部分,dump出来的线程信息。

 

01 ---------------  P R O C E S S  ---------------
02 Java Threads: ( => current thread )
03   0x0000000056523000 JavaThread "Keep-Alive-Timer" daemon [_thread_blocked, id=12281,
04 stack(0x00000000478cc000,0x00000000479cd000)]
05   0x0000000056a2e000 JavaThread "pool-7-thread-3" [_thread_blocked, id=8876, stack
06 (0x0000000046fc3000,0x00000000470c4000)]
07   0x000000005687f800 JavaThread "ClientConnectionHandler" daemon [_thread_in_native,
08 id=4786, stack(0x0000000044599000,0x000000004469a000)]
09   0x0000000056d0b000 JavaThread "MERGE2.FindSubgroups thread (channel=*******)"
10 daemon [_thread_blocked, id=4710, stack(0x00000000472c6000,0x00000000473c7000)]
11   0x0000000056796800 JavaThread "pool-7-thread-2" [_thread_blocked, id=6325, stack
12 (0x00000000477cb000,0x00000000478cc000)]
13   
14 ......以下省略N行
15 Heap
16  PSYoungGen      total 160448K, used 154320K [0x00002aaac8b60000, 0x00002aaad2fc0000,
17 0x00002aaad3600000)
18   eden space 152448K, 100% used [0x00002aaac8b60000,0x00002aaad2040000,0x00002aaad2040000)
19   from space 8000K, 23% used [0x00002aaad27f0000,0x00002aaad29c4018,0x00002aaad2fc0000)
20   to   space 7872K, 12% used [0x00002aaad2040000,0x00002aaad2134018,0x00002aaad27f0000)
21  PSOldGen        total 349568K, used 344605K [0x00002aaab3600000, 0x00002aaac8b60000,
22 0x00002aaac8b60000)
23   object space 349568K, 98% used [0x00002aaab3600000,0x00002aaac8687690,0x00002aaac8b60000)
24  PSPermGen       total 65792K, used 48038K [0x00002aaaae200000, 0x00002aaab2240000,
25 0x00002aaab3600000)
26   object space 65792K, 73% used [0x00002aaaae200000,0x00002aaab10e9bf8,0x00002aaab2240000)
27   
28 ......以下再省略N行
29 VM Arguments:
30 jvm_args: -Xms128m -Xmx512m -XX:PermSize=64m -Djava.net.preferIPv4Stack=true -Drialto.command.port=6789 -Drialto.work.dir=/home/admin/output/work
31 java_command: com.******.*****.*****.apptask.CheckTaskStart
32 Launcher Type: SUN_STANDARD
33 Environment Variables:
34 JAVA_HOME=/usr/*****/java
35 PATH=/usr/*****/java/bin:/usr/******/ant/bin:/usr/******/antx-2/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/admin/bin
36 LD_LIBRARY_PATH=/usr/*******/install/jdk1.6.0_18/jre/lib/amd64/server:/usr/******/install/jdk1.6.0_18/jre/lib/amd64:/usr/******/install/jdk1.6.0_18/jre/../lib/amd64
37 SHELL=/bin/bash

 

在略过上面N行的处于bolcked状态下的线程信 息后,我们终于看到了此时的堆信息。由标红处我们发现,crash正处于eden区达到了100%要进行young gc的时候,因此我们有理由相信是由于young gc出了问题所致。但是什么问题呢?于是上google搜了一下“jvm crash young gc”。good luck!第一篇就找到了相应的解决方法,原来是这是jdk1.6u18的一个bug,官方文档介绍如下:

 

1 Card-Marking Optimization Issue
2 A flaw in the implementation of a card-marking performance optimization in the JVM can cause heap corruption under some circumstances. This issue affects the CMS garbage collector prior to 6u18, and the CMS, G1 and Parallel Garbage Collectors in 6u18. The serial garbage collector is not affected. Applications most likely to be affected by this issue are those that allocate very large objects which would not normally fit in Eden, or those that make extensive use of JNI Critical Sections (JNI Get/Release*Critical).
3 This issue will be fixed in the next Java SE 6 update.
4 Meanwhile, as a workaround to the issue, users should disable this performance optimization by -XX:-ReduceInitialCardMarks.

 

 

 

        这段话主要三个意思:一是指这个bug影响的GC类型为1.6u18前的CMS类GC以及1.6u18的CMS、G1和并行类GC,而串行GC不受影 响;二是指哪些程序会受影响,主要是那些会分配大量的大对象而eden区过小或者对JNI使用比较敏感的程序;三是指明了处理方法

 

           那么此处是否符合前面的两个条件呢?通过JVM参数,我们发现本例中的GC类型未指定,也就是使用的是默认参数,那么默认的GC类型是什么呢?在 JDK5.0之前默认的GC是串行GC,但是之后尤其是到了JDK6.0之后就更加智能化了,会依据机器的性能来进行指定,怎么个指定法呢?有以下三条原 则:

 

           1、如果你是使用服务器类JVM的话,那么就会由并行GC来取代串行GC;

 

         2、当程序运行后,会首先去检查硬件环境,如果确定其性能满足服务器类机器的标准的话,就会运行服务器类JVM

 

            3、什么样的机器符合服务器类的标准呢?CPU至少要在2核以上,物理内存在2G以上。

 

           通过以上三条,可以确认任务机符合服务器类机器的标准,因此会使用并行GC,在这个bug的影响范围内。而对于第二点,JVM参数只指定了512M内存, 除去永久区的64M,而新生代与老生代的默认分配比例是1:8,因此新生代大约是在50M左右,的确不是一个很大的数字。当初也许是由于担心任务和web 跑在一台机器上吧,因此将JVM的堆参数设得这么小。

 

           后续的处理方法一是将任务的JVM参数标准化;二是使用-XX:-ReduceInitialCardMarks来解决这个bug!

参考原文来自:http://blog.csdn.net/hpsysljt/article/details/6388082

分享到:
评论

相关推荐

    Linux服务器Java进程消失问题解决

    有时 Linux 系统或者系统上运行的 Java 或者其它进程,会发生一些莫名其妙的问题,比如突然挂掉了,比如突然重启等等。在软件上找不到问题所在,此时我们应该怀疑硬件或者内核的问题,此时我们就可以使用 dmesg 来...

    软件工程第三章实验报告.docx

    软件工程第三章实验报告.docx

    第三章-第八节通信礼仪.ppt

    第三章-第八节通信礼仪.ppt

    智能家居股份合作协议.docx

    智能家居股份合作协议.docx

    西门子S7-1200 PLC双轴定位控制在电池焊接中的应用与优化

    内容概要:本文详细介绍了基于西门子S7-1200 PLC的双轴定位控制系统在电池焊接项目中的应用。主要内容涵盖双轴定位算法的设计与实现,包括使用SCL语言编写的运动控制函数块,以及梯形图用于处理IO互锁和焊接时序控制。文中还讨论了威纶通触摸屏的界面设计,如动态元素映射、宏指令的应用,以及电气图纸的安全回路设计。此外,文章分享了多个调试技巧和注意事项,如加速度参数设置、伺服驱动器订货号核对、BOM清单管理等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是熟悉PLC编程和触摸屏界面设计的专业人士。 使用场景及目标:适用于需要深入了解PLC编程、运动控制算法、触摸屏界面设计及电气图纸绘制的工程项目。目标是提高双轴定位控制系统的精度和稳定性,确保电池焊接的质量和安全性。 其他说明:文中提供了完整的工程文件包下载链接,并强调了在实际应用中需要注意的具体事项,如硬件配置检查、参数调整等。

    Simulink与Carsim联合仿真:基于PID与MPC的自适应巡航控制系统设计与实现

    内容概要:本文详细介绍了如何利用Simulink和Carsim进行联合仿真,实现基于PID(比例-积分-微分)和MPC(模型预测控制)的自适应巡航控制系统。首先阐述了Carsim参数设置的关键步骤,特别是cpar文件的配置,包括车辆基本参数、悬架系统参数和转向系统参数的设定。接着展示了Matlab S函数的编写方法,分别针对PID控制和MPC控制提供了详细的代码示例。随后讨论了Simulink中车辆动力学模型的搭建,强调了模块间的正确连接和参数设置的重要性。最后探讨了远程指导的方式,帮助解决仿真过程中可能出现的问题。 适合人群:从事汽车自动驾驶领域的研究人员和技术人员,尤其是对Simulink和Carsim有一定了解并希望深入学习联合仿真的从业者。 使用场景及目标:适用于需要验证和优化自适应巡航控制、定速巡航及紧急避撞等功能的研究和开发项目。目标是提高车辆行驶的安全性和舒适性,确保控制算法的有效性和可靠性。 其他说明:文中不仅提供了理论知识,还有大量实用的代码示例和避坑指南,有助于读者快速上手并应用于实际工作中。此外,还提到了远程调试技巧,进一步提升了仿真的成功率。

    基于MATLAB/Simulink的变压器励磁涌流仿真模型构建与应用

    内容概要:本文深入探讨了利用MATLAB/Simulink搭建变压器励磁涌流仿真模型的方法和技术。首先介绍了空载合闸励磁涌流仿真模型的搭建步骤,包括选择和配置电源模块、变压器模块以及设置相关参数。文中详细讲解了如何通过代码生成交流电压信号和设置变压器的变比,同时强调了铁芯饱和特性和合闸角控制的重要性。此外,还讨论了电源简化模型的应用及其优势,如使用受控电压源替代复杂电源模块。为了更好地理解和分析仿真结果,文章提供了绘制励磁涌流曲线的具体方法,并展示了如何提取和分析涌流特征量,如谐波含量和谐波畸变率。最后,文章指出通过调整电源和变压器参数,可以实现针对不同应用场景的定制化仿真,从而为实际工程应用提供理论支持和技术指导。 适合人群:从事电力系统研究、变压器设计及相关领域的科研人员、工程师和技术爱好者。 使用场景及目标:适用于希望深入了解变压器励磁涌流特性的研究人员,旨在帮助他们掌握MATLAB/Simulink仿真工具的使用技巧,提高对励磁涌流现象的理解和预测能力,进而优化继电保护系统的设计。 其他说明:文中不仅提供了详细的建模步骤和代码示例,还分享了一些实用的经验和技巧,如考虑磁滞效应对涌流的影响、避免理想断路器带来的误差等。这些内容有助于读者在实践中获得更加准确可靠的仿真结果。

    三菱FX3U PLC与Factory IO通讯仿真PID液位调节程序:低成本高效学习PID控制

    内容概要:本文详细介绍了利用三菱FX3U PLC与Factory IO通讯仿真进行PID液位调节的方法,旨在降低学习PID控制的成本和难度。文中首先指出了传统硬件学习PID控制面临的高昂成本和复杂接线问题,随后介绍了仿真程序的优势,包括PID配置参数、调节参数、自整定和手动整定的学习方法。接着阐述了所需的设备和软件环境,以及具体的代码示例和寄存器配置。最后,通过实例展示了如何通过仿真环境进行PID参数调整和测试,验证了该方案的有效性和实用性。 适合人群:初学者和有一定PLC基础的技术人员,特别是那些希望通过低成本方式学习PID控制的人群。 使用场景及目标:适用于希望在不购买昂贵硬件的情况下,快速掌握PID控制原理和技术的应用场景。目标是通过仿真环境,熟悉PID参数配置和调整,最终能够应用于实际工业控制系统中。 其他说明:本文不仅提供了理论指导,还给出了详细的实践步骤和代码示例,使读者能够在实践中更好地理解和掌握PID控制技术。同时,强调了仿真环境与实际项目的相似性,便于知识迁移。

    智慧城市树木二维码智能管理系统概述.docx

    智慧城市树木二维码智能管理系统概述.docx

    .NET框架下基于Oracle数据库的大型MES生产制造管理系统源码解析与应用

    内容概要:本文详细介绍了基于.NET框架和Oracle数据库构建的大型MES(制造执行系统)生产制造管理系统的源码结构及其技术特点。该系统采用了BS架构,适用于Web端和WPF客户端,涵盖了从数据库设计、业务逻辑处理到前端展示等多个方面。文中不仅提供了具体的代码示例,还深入剖析了系统的技术难点,如Oracle数据库的高效连接方式、多线程处理、实时数据推送以及高级特性(如分区表、压缩技术和批量操作)的应用。此外,作者还分享了一些关于系统部署和维护的经验。 适合人群:主要面向拥有五年以上.NET开发经验的专业人士,特别是那些对Oracle数据库有一定了解并且参与过大中型项目开发的技术人员。 使用场景及目标:①帮助开发者深入了解MES系统的工作原理和技术实现;②为现有的MES系统提供优化思路;③作为学习资料,用于掌握.NET框架与Oracle数据库的最佳实践。 其他说明:尽管缺少完整的安装说明和数据库备份文件,但凭借丰富的代码片段和技术细节,这套源码仍然是一个宝贵的学习资源。同时,文中提到的一些技术点也可以应用于其他类型的工业控制系统或企业管理信息系统。

    lesson6_点阵.zip

    lesson6_点阵.zip

    jicmp(OpenNMS所需重要组件)

    ‌OpenNMS 依赖组件 jicmp 的完整解析与安装指南‌ ‌一、jicmp 的核心作用‌ ‌ICMP 协议支持‌ jicmp(Java Interface for ICMP)是 OpenNMS 实现网络设备可达性检测(如 Ping)的关键组件,通过原生代码高效处理 ICMP 报文,替代纯 Java 实现的性能瓶颈17。 ‌依赖版本要求‌:OpenNMS 33.1.5 需 jicmp >= 3.0.0,以支持 IPv6 及多线程优化7。 ‌与 jicmp6 的协同‌ jicmp6 是 jicmp 的扩展组件,专用于 IPv6 网络环境检测,二者共同构成 OpenNMS 网络监控的底层通信基础78。 ‌二、jicmp 安装问题的根源‌ ‌仓库版本不匹配‌ OpenNMS 官方旧版仓库(如 opennms-repo-stable-rhel6)仅提供 jicmp-2.0.5 及更早版本,无法满足新版 OpenNMS 的依赖需求78。 ‌典型错误‌:Available: jicmp-2.0.5-1.el6.i386,但 Requires: jicmp >= 3.0.07。 ‌手动编译未注册到包管理器‌ 手动编译的 jicmp 未生成 RPM 包,导致 yum 无法识别已安装的依赖,仍尝试从仓库拉取旧版本57。 ‌三、解决方案:正确安装 jicmp 3.0‌ ‌通过源码编译生成 RPM 包‌ bash Copy Code # 安装编译工具链 yum install -y rpm-build checkinstall gcc-c++ autoconf automake libtool # 编译并生成 jicmp-3.0.0 RPM wget https://sourceforge.net/projects/opennms/files/JICMP/stable-3.x/j

    机械CAD零件图.ppt

    机械CAD零件图.ppt

    制冷站智能群控管理系统的技术实现与优化

    内容概要:本文详细介绍了制冷站智能群控管理系统的构成及其核心技术实现。首先阐述了系统的四大组成部分:环境感知模块、数据处理模块、决策控制模块以及设备控制模块。接着通过具体的Python代码示例展示了如何利用MQTT协议进行设备间的通信,实现了温度控制等功能。此外,文中还探讨了数据处理中的噪声过滤方法、设备控制中的状态锁定机制、以及采用强化学习进行能效优化的具体案例。最后展望了未来的发展方向,如引入能量管理和AI集成等。 适合人群:从事制冷站自动化控制领域的工程师和技术人员,尤其是对智能群控管理系统感兴趣的从业者。 使用场景及目标:适用于希望提升制冷站自动化水平的企业和个人。目标在于提高系统的稳定性和效率,减少人为干预,实现节能减排。 其他说明:文章不仅提供了理论性的介绍,还有大量的实战经验和代码片段分享,有助于读者更好地理解和应用相关技术。

    CNN卷积神经网络FPGA加速器实现:从软件到硬件的深度学习部署

    内容概要:本文详细介绍了将卷积神经网络(CNN)从软件到硬件的全过程部署,特别是在FPGA上的实现方法。首先,作者使用TensorFlow 2构建了一个简单的CNN模型,并通过Python代码实现了模型的训练和权值导出。接着,作者用Verilog手写了CNN加速器的硬件代码,展示了如何通过参数化配置优化加速效果。硬件部分采用了滑动窗口和流水线结构,确保高效执行卷积操作。此外,文中还讨论了硬件调试过程中遇到的问题及其解决方案,如ReLU激活函数的零值处理和权值存储顺序的对齐问题。最后,作者强调了参数化设计的重要性,使得硬件可以在速度和面积之间灵活调整。 适合人群:对深度学习和FPGA感兴趣的开发者,尤其是有一定编程基础和技术背景的研究人员。 使用场景及目标:适用于希望深入了解CNN算法硬件实现的人群,目标是掌握从软件到硬件的完整部署流程,以及如何通过FPGA加速深度学习任务。 其他说明:文中提供了详细的代码片段和调试经验,有助于读者更好地理解和实践。同时,项目代码可在GitHub上获取,方便进一步研究和改进。

    无人驾驶车辆高速MPC控制:基于MATLAB与CarSim的双移线场景复现

    内容概要:本文详细介绍了无人驾驶车辆高速MPC(模型预测控制)控制系统的复现过程,主要涉及MATLAB和CarSim软件工具的应用。作者通过调整caraim文件、构建Simulink控制逻辑以及优化MPC算法,将原有的直线跟车场景成功转换为双移线场景。文中不仅展示了具体的技术实现步骤,如路径点设置、权重矩阵调整、采样时间对齐等,还分享了调试过程中遇到的问题及其解决方案,如参数不匹配、模型不收敛等。最终实现了车辆在虚拟环境中按预定双移线轨迹行驶的目标。 适合人群:从事无人驾驶车辆研究和技术开发的专业人士,尤其是对MPC控制算法感兴趣的工程师。 使用场景及目标:适用于需要深入了解无人驾驶车辆控制系统的设计与实现的研究人员和技术开发者。目标是帮助读者掌握如何利用MATLAB和CarSim进行无人驾驶车辆的模拟实验,特别是在高速场景下的双移线控制。 其他说明:文章强调了MPC在高速场景下的挑战性和调参技巧,提供了宝贵的实践经验。同时提醒读者注意环境配置、控制器核心代码解析以及联合仿真可能出现的问题。

    监控场景下基于CLIP的细粒度目标检测方法.pdf

    监控场景下基于CLIP的细粒度目标检测方法.pdf

    MATLAB频谱与功率谱分析:从理论到实践的全面解析

    内容概要:本文详细介绍了如何使用MATLAB进行频谱和功率谱分析,涵盖了从基础概念到高级应用的各个方面。首先,通过生成人工信号并绘制时域图,帮助读者熟悉基本操作。接着,深入探讨了频谱分析的关键步骤,如快速傅里叶变换(FFT)、窗口函数的选择、频谱横坐标的正确转换等。对于功率谱分析,则介绍了Welch法及其具体实现。针对真实数据处理,讨论了如何读取外部数据、处理非均匀采样、去除趋势项等问题,并提供了多种实用技巧,如滑动平均、自动标注主要频率成分等。此外,还强调了一些常见的错误和注意事项,确保读者能够避免常见陷阱。 适用人群:适用于具有一定MATLAB基础的科研人员、工程师和技术爱好者,特别是那些从事信号处理、通信工程、机械振动分析等领域的人士。 使用场景及目标:① 学习如何使用MATLAB进行频谱和功率谱分析;② 掌握处理实际工程中复杂信号的方法;③ 提高对信号特征的理解能力,以便更好地应用于故障诊断、质量检测等实际工作中。 其他说明:文中提供的代码片段可以直接用于实践,读者可以根据自己的需求进行适当修改。通过跟随文中的步骤,读者不仅能够学会如何绘制频谱图和功率谱图,还能深入了解背后的数学原理和技术细节。 标签1,MATLAB,频谱分析,功率谱,Welch法,FFT

    基于FAST与MATLAB/Simulink的5MW风力发电机PID变桨控制联合仿真研究

    内容概要:本文详细介绍了基于FAST与MATLAB/Simulink联合仿真平台,对5MW非线性风力发电机进行统一变桨(CPC)和独立变桨(IPC)控制策略的研究。首先,通过将OpenFAST编译成Simulink可调用的S-Function模块,构建了联合仿真环境。接着,分别实现了统一变桨和独立变桨的PID控制器,并在三维湍流风场中进行了性能测试。结果显示,独立变桨在转速稳定性和载荷控制方面表现出色,能够显著降低叶根挥舞弯矩和偏航力矩,从而提高风机的可靠性和使用寿命。然而,独立变桨也带来了作动器磨损增加的问题。 适合人群:从事风电控制系统设计、仿真建模以及希望深入了解变桨控制策略的研发工程师和技术研究人员。 使用场景及目标:适用于需要评估不同变桨控制策略在复杂风场条件下的性能表现,优化风机运行效率和可靠性,以及探索新的控制算法的应用场景。 其他说明:文中提供了详细的模型搭建步骤、关键代码片段和仿真结果分析,并附有相关参考文献和GitHub资源链接,方便读者进一步深入研究。

Global site tag (gtag.js) - Google Analytics