相信大家都遇到过,自己的Java应用运行一段时间就宕机了或者响应请求特别慢。这时候就需要我们了来找出问题所在了。绝大部分都是代码问题导致的。

一、服务宕机

如果是服务宕机,发生致命问题导致进程已经死掉了,那么已经访问不了了,通常都是CPU问题引起的,程序一般会自己生成javacore文件,一般生成位置在/root目录或jar包同目录下。JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。

找到这个文件,执行命令

gdb java

bt

如果文件没有损坏的话可以看到完整的栈调用信息。就可以定位到问题代码所在。

我曾经就因为底层调用的一个geo库出问题,导致程序直接挂掉,分析core文件可以清晰的看到native方法的调用。

二、服务响应请求慢

出现这个问题一般都是内存溢出,GC线程一直在重复GC,没有线程来处理用户请求,或者问题代码导致CPU占用过高。

程序崩溃前会生成HeapDump文件,也可以手动生成,HeapDump是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况。

在JVM启动参数要配置好HeapDump的生成位置和配置打印gc日志。这样才能排查问题。

先分析GC日志

把gc文件上传就好了,就可以看到分析结果。重点关注什么区域的GC占用最多时间。

离线分析工具:GCViewer 是一款开源的GC日志分析工具。

如果程序内存溢出,通过分析gc文件可以发现程序内存占用机会100%而且一直重复GC。

分析HeapDump文件

1、先找到Java应用的pid

ps -ef | grep java 或者 jps -l 查看

2、查看堆内存使用量

jmap -heap

3、查看Java进程中的每一个线程的情况(linux),可以清晰的看到每一个线程的cpu及内存使用情况

top -Hp

window下可以借助工具 Process Explorer,

4、打印线程快照信息,保存到文件xxx.txt中方便查看

jstack > xxx.txt

5、通过top -Hp 看到的线程id是10进制的,我们输出到xxx.txt中的是16进制,所以需要转一下,找一个异常线程tid

printf "%x" 假如输出为 1111

6、在xxx.txt文件中查找tid为1111的栈信息,可以看到这个线程在干什么,定位到问题代码。

7、程序宕机会自动产生dump文件,若没有宕机就手动导出dump文件

jmap -dump:format=b,file=文件名

桌面分析工具:Eclipse Memory Analyzer,它有windows版的和Linux版的

windows下:把HeapDump文件放进去就可以了,分析完后,很直观的看到当前内存占用量最高的是某个类的某个参数。持有了多少个对象,这些对象占用了多少内存,从而定位到问题代码。

Linux下:先把Eclipse Memory Analyzer版上传到服务器,解压,假如/home/mat为解压后路径,执行命令

/home/mat/ParseHeapDump.sh org.eclipse.mat.api:suspects prg.eclipse.mat.api:overview

org.eclipse.mat.api:top_components

分析完之后会在当前文件生成结果文件。下载到本地查看即可。

以上这篇Java应用/JVM宕机排查步骤操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

java进程宕机生产core_Java应用/JVM宕机排查步骤操作相关推荐

  1. java 宕机_Java应用/JVM宕机排查步骤操作

    相信大家都遇到过,自己的Java应用运行一段时间就宕机了或者响应请求特别慢.这时候就需要我们了来找出问题所在了.绝大部分都是代码问题导致的. 一.服务宕机 如果是服务宕机,发生致命问题导致进程已经死掉 ...

  2. Linux生产环境CPU占用过高排查步骤

    先用top命令找出CPU占比最高的 top CPU占用最高的是java进程,它的 进程ID:3362 ps -ef 或者 jps 进一步定位,得知是怎样的程序 [root@192 ~] ps -ef ...

  3. 如何优雅地停止Java进程

    目录 理解停止Java进程的本质 应该如何正确地停止Java进程 如何注册关闭钩子 使用关闭钩子的注意事项 信号量机制 总结 理解停止Java进程的本质 我们知道,Java程序的运行需要一个运行时环境 ...

  4. vmx进程已提前退出_如何优雅地停止Java进程

    目录 理解停止Java进程的本质 应该如何正确地停止Java进程如何注册关闭钩子使用关闭钩子的注意事项信号量机制 总结 理解停止Java进程的本质 我们知道,Java程序的运行需要一个运行时环境,即: ...

  5. java 结束程序_如何优雅地停止Java进程

    目录 理解停止Java进程的本质 我们知道,Java程序的运行需要一个运行时环境,即:JVM,启动Java进程即启动了一个JVM. 因此,所谓停止Java进程,本质上就是关闭JVM. 那么,哪些情况会 ...

  6. 玻璃瓶盖买家怎样区分玻璃瓶盖是手工机工艺还是行列机生产

    玻璃瓶盖生产工艺,有手工机和行列机两种工艺,生产出的玻璃瓶盖有一定的区别,辨别时可参考以下几点: 1.口模线和玻璃瓶盖身模具线行列机工艺是一致的,也就是在一条直线上,而手工机则不一定在一条直线上. 的 ...

  7. linux线程引起jvm崩溃,JVM宕机分析

    1.可以引发JVM崩溃的常见缘由有:linux 线程阻塞数据库 CPU 使用率太高服务器 JVM Crash工具 堆内存不足google 类装载spa Java虚拟机自身的Bug操作系统 JDK与服务 ...

  8. jvm 宕机 打印jvm_通过入侵JVM打印阵列

    jvm 宕机 打印jvm 总览 Java中最常见的陷阱之一就是知道如何打印数组. 如果有关如何打印阵列的答案获得了超过1000票赞成票,那么您必须怀疑是否有更简单的方法. 几乎所有其他流行语言都具有这 ...

  9. 生产环境下JAVA进程高CPU占用故障排查

    感谢原作者 http://blog.chinaunix.net/uid-10449864-id-3463151.html 问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常 ...

  10. java进程老挂掉_Java进程突然挂掉排查分析手记(jvm bug)

    故障:11.56 Zabbix收到告警,系统业务一个java进程挂了,今日正好值班遇到,做个分析手记,可以供大家参考. 排查1:查看系统资源情况 主要发现此刻CPU均突然增长,swap内存也有所增长但 ...

最新文章

  1. crytojs加密 java解密,使用CryptoJS在Javascript中加密并在Java中解密
  2. 使用pip安装python库的几种方式,解决pip安装python库慢的问题
  3. python刷阅读_用Python汇集并生成每日教育动态
  4. python语言是由谁设计并领导开发的_python语言概述 - osc_lt3ocv4d的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. JUnit 4测试驱动开发结构图
  6. CountDownLatch使用解说
  7. 文本文件的输入输出流(这里的重点在于字符集问题)
  8. 用CMake编译lua
  9. 关于胶质母细胞瘤的影像组学和影像基因组学
  10. 焊缝标注vlx实用程序_【CAD自动标注插件下载】CAD自动标注插件yjbz.VLX v1.0 最新版-开心电玩...
  11. 汽车故障诊断方法及注意事项
  12. fastai 2019 lesson9 notes 笔记
  13. MIS迭代一:增删改查功能测试
  14. Centos7超详细服务器上安装配置教程
  15. Maven笔记 - 第三章
  16. 【翻译】NIST IR 8151: 显著减少软件漏洞——致美国白宫科技政策办公室
  17. 其实我不怕过光棍节,我只是怕你不过光棍节~
  18. 计算机9针485接口,RS485是九针的插口,而实际上里面只能两根线是有用的,其它的七根线则无作用,那为什么弄九针呢?-工业支持中心-西门子中国...
  19. Attention Mask
  20. jsp分页技术的实现

热门文章

  1. 【滤波器】基于matlab平方根升余弦滤波器【含Matlab源码 994期】
  2. 【数据分析】基于matlab伊藤微分方程布朗运动分析【含Matlab源码 261期】
  3. 人工智能火灾报警器_使用AI进行准确的火灾预测
  4. appium python框架结构_Appium 自动化测试之框架
  5. pg数据库生成随机时间_postgreSQL自动生成随机数值的实例
  6. Python基本数据类型(数字、字符串、列表、元组、集合、字典)
  7. 【C++】常用算数生成算法
  8. java 类修饰符 作用域_java的4种内部类,你真的了解了吗?
  9. 电脑蓝牙在哪里打开_华为手机与华为Matebook笔记本如何通过蓝牙传输文件
  10. 南京晓庄学院c语言试卷,南京晓庄学院—C语言期末考试复习提纲.doc