热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Java应用/JVM宕机排查步骤操作

这篇文章主要介绍了Java应用JVM宕机排查步骤操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

一、服务宕机

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

找到这个文件,执行命令

gdb java <文件>

bt

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

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

二、服务响应请求慢

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

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

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

先分析GC日志

在线分析工具地址:https://gceasy.io/

把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

参考这一篇文章: https://www.jb51.net/article/195797.htm

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宕机排查步骤操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • 本文详细介绍如何在忘记MySQL服务器密码的情况下进行密码重置,包括具体的步骤和注意事项。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文详细介绍了如何在Windows操作系统中通过Samba服务访问Red Hat Linux中的资源,包括配置Samba服务器、设置工作组名称、添加用户和共享目录等步骤。 ... [详细]
  • Java作为全球最流行的编程语言之一,应用广泛。本文将详细介绍Java开发的相关岗位及其具体职责,帮助读者更好地了解这一领域的职业发展路径。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • 华为捐赠欧拉操作系统,承诺不推商用版
    华为近日宣布将欧拉开源操作系统捐赠给开放原子开源基金会,并承诺不会推出欧拉的商用发行版。此举旨在推动欧拉和鸿蒙操作系统的全场景融合与生态发展。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 解决Eclipse中缺少Android SDK和AVD管理器的问题
    本文介绍了如何在Eclipse的Window菜单中添加Android SDK和AVD管理器选项,通过自定义透视图中的命令组可用性设置来实现。 ... [详细]
  • Java毕业设计项目:“传情旧物”网站(含源码与数据库)
    本项目介绍了如何配置和运行“传情旧物”网站,包括所需的技术栈、环境配置以及具体的操作步骤。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
author-avatar
aaaaaaaaaa本尊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有