记一次JVM故障排除

今天,自己开发的事件驱动的java大规模爬虫程序上线了几个新任务后突然异常。

异常:

   程序业务异常,经查看CPU利用率满,内存满,一直报OOM,目测有内存泄露。如下图所示,四核16G的内粗,CPU高达400%,内存使用了 6G,刚好爆满,JVM启动参数为:

java -server -Xmx6114M -Xms2048M -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -Xloggc:/home/ubuntu/logs/spider/master/gc.log -XX:+PrintGCDateStamps -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/ubuntu/heap/spider/master/dump -jar /home/ubuntu/apps/spider-service/spider-master/current

内存截图:

分析:

  首先找java进程为13419,找到该进程的什么线程使用最多,运行top -p 13419 -H  得到如下截图,一直观察得出,有四个线程一直占用100%的CPU;

  于是设法找到CPU的线程的调用栈,运行 jstack 13419 >表示 jstack.log 查看文件信息,发现没有对应线程的状态,也就找不到调用栈(注意,想找线程nid,可能需要转换16进制表示,因为线程nid在jstack.log中为16进制)

  

  想到这里,已经知道,该上面四个线程应该是GC线程,所以找不到,因此确定到处堆文件分析,于是运行 jmap -dump:live,format=b,file=heap-dump.bin 13419  获得堆文件;但首先我查看对象的统计情况,跑jmap histo >out.log 得到对象信息:

  从上图可得,(S0为survive0区,S1为survive1区,而U代表使用,C代表总大小,E、O、M分别代表年轻代,年老代,Meta区,T为时间),一直发生YGC次数较多!

程序点:

后面分析堆文件找调用栈:

原文地址:https://www.cnblogs.com/iCanhua/p/10534643.html

时间: 2024-10-13 03:54:36

记一次JVM故障排除的相关文章

Java 应用故障排除

对于在线用户来说,常常因为流量过高,程序bug,依赖故障,线程死锁,配置错误等导致系统不用下面介绍一些常用Java故障工具排除问题. 一.常用工具: JDK 自身提供了一系列的Java故障排除工具,虽然简单,但是十分有用. 1,jps jps用来输出一些JVM虚拟机的进程信息,类似于Linux的ps命令,     ,它的作用是显示当前系统的java进程情况,及其id号.我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例),和他们的进程号(为下

Linux系统启动原理及故障排除

Linux启动过程详解影响启动的配置文件常见的启动故障排除救援模式的使用Live CD的使用 Linux启动过程详解:1:加载BIOS的硬件信息,跟据设定取得第一个可开机引导设置2:读取硬盘中MBR的bootloader<grub.....>    MBR详解        名称:主引导扇区,主引导扇区        位置:硬盘的0柱面,0磁头,1扇区        大小:磁盘默认一个扇区大小为512字节,而MBR也是1个扇区,自然是512字节        三部分组成:           

Linux下的系统启动原理及故障排除

Linux下的系统启动原理及故障排除 一:实验环境 1):虚拟机 2):linux系统环境 二:实验目标 1):理解Linux启动过程详解 2):理解影响启动的配置文件 3):常见的启动故障排除 4):救援模式的使用 三:实验步骤 第一块 Linux启动过程详解 1. 加载 BIOS 的硬件信息,跟据设定取得第一个可开机引导设置,如:光驱,硬盘,网络,USB: 如果是硬盘为第一引导. 2. 读取硬盘中 MBR 的 bootLoader (亦即是 grub,Lilo 等程序): 硬盘的0柱面.0磁

系统启动过程以及故障排除

系统的启动过程 1.加电----CMOS----post(上电自测试程序)----- grub(早期的时候使用的是lilo) Grub的第一阶段主要起到一个引导MBR中的446B.第二阶段在硬盘上,主要是一个配置. 对于任何一种操作系统,任何一台机器,刚开始的时候,肯定是要进行加电的,加完电之后在主板上有一个叫CMOS的芯片,CMOS里面有一个程序,这个程序叫post上电自测试程序.它能够对硬件来完成一些自检,比如,在机器里面内存有多大,CPU是哪一种型号的,声卡.显卡,所以这个叫上电自测试.

Atitit.故障排除系列-----apache 不能启动的排除

Atitit.故障排除系列-----apache 不能启动的排除 能直接使用cli启动httpd   ,,详细打印出信息.. C:\Users\ASIMO>"C:\wamp\apache2\bin\httpd.exe" httpd.exe: Syntax error on line 42 of C:/wamp/Apache2/conf/httpd.conf: ServerRoo t must be a valid directory 作者:: 老哇的爪子 Attilax 艾龙, 

Atitit.故障排除系列---NoClassDefFoundError NoClassDefFoundError

Atitit.故障排除系列---NoClassDefFoundError  NoClassDefFoundError java.lang.ClassNotFoundException找不到类异常.当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常. 还有个NoClassDefFoundError,,是classload 新不上class加载.. 查看class是存在的... 作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:[

Atitit.故障排除系列---php 程序网站数据库错误排除流程

Atitit.故障排除系列---php 程序网站数据库错误排除流程 Php页面报告的错误不能定位到myusql的db配置上...字说是db conn err Mysql 接入错误...大概查看哈能不能行上配置文件..三,心不死,子能trace兰... 作者::老哇的爪子Attilax艾龙,EMAIL:[email protected] 转载请注明来源: http://blog.csdn.net/attilax Index.php error_reporting(E_ALL  ); 中间,走不个c

在制品和成本故障排除常用脚本

1. 待定在制品物料事务处理? 这些脚本只是Oracle支持服务提供以故障排除为目的.  这些脚本已经过测试且照预计方式运作.然而,在依靠任何脚本之前,你应该始终先进行测试. 请运行这些脚本之前之前先进行校对! 由于不同方式的文件编辑器,电子邮件软件包和操作系统处理文本格式(空格,制表符和回车符),当你第一次收到他们时,这些脚本可能在一个无法执行状态. 检查一下这个脚本,以确保这种类型的错误得到纠正. 首先检查库存事务处理管理器是否运行,如果有任何待定或错误记录在列表中的事务处理界面.  这些都

HCNP学习笔记之OSPF协议原理及配置9-OSPF故障排除

如何去定位故障的原因以及准确的排除故障,都需要建立在对协议运作非常了解的基础上. 本文就是介绍OSPF故障排除的思路和操作. 用到的命令: display ip routing-table //先看路由,确定故障位置 display ospf peer      // 根据邻居关系,进一步确定故障点 display ospf error     // 华为,华3路由器专有,思科不支持,很强大 display current-configuration   //不推荐用,现网中配置数据量很大 di