JVM coredump

article/2025/10/23 13:26:26

JVM crash分析

Java程序运行的时候,遇到了coredump的现象。最后定位到时JIT导致的bug。

http://www.oracle.com/technetwork/java/javase/crashes-137240.html#gbyzu

这里记录下JVMcrash产生的文件怎么去定位问题,但是一般不会遇到crash,hotspot被这么多太机器天天跑,很显眼的问题早被sun修复了。如果你想让JVM挂掉这里提供一个方法:

1.执行ulimit -c unlimited, 这个命令是打开系统对coredump的限制,搞过C++的同学是不是很讨厌这个东西。

2.执行一个JavaTest程序, 让程序sleep一段时间

3.Kill -11 pid,这里给java程序发送了一个SIGSEGV信号,他会以为自己挂了,产生coredump。

JVM挂掉之后产了两个文件,hs_err_pid.log, coredump。hs_err_pid.log基本就是对coredump的描述文件。先看看coredump里面的东西,后面在介绍log文件。Coredump文件需要用gdb去调试,执行命令: gdb -c core java,之后的场景是这样的

是不是很奇怪,kill发送的是SIGSEGV信号,为什么程序是挂载了SIGART上面呢。这是因为JVM扑捉了11这个信号,保留当前的场景,就是你上面看到的hs_err_pid.log这个文件。所以这个文件记录的是那个栈帧的场景,不要直接拿coredump当前栈帧去对照log,你会对不上的。不信的话,infoframe看下rip寄存器和log文件里面的是否一样。这里需要跳到#7栈帧(看上图左边的序号),才是程序挂掉当时的场景。执行f 7之后,再看看info frame,已经和log里面的记录一样了。

下面就解说下log里面到底记录了什么。

日志文件开头就告诉你,JVM是SIGSEGV这个信号的锅,pc是程序计数器,本来指向下一条要执行的指令地址,coredump里面其实就变为执行出问题的那条指令。pid大家都知道,tid是线程id,gdb调试输入命令thread就得到如下

可以看到当前线程号,就是log文件里面记录的线程号。这里插一句,linux里面没有线程这个东西,是LWP模拟的,所以后面有个LWP的进程号,大家用的pthread_create都是glibc模拟出来的东西,操作系统只有fork和clone接口来创建进程。

日志文件的第二部分是进程的挂掉当时的寄存器和栈顶部数据。如下图

途中si_signo表示信号,si_code表示信号产生的用户,uid表示用户id。如上面所说,gdb退回到7号栈帧之后展现的内容和日志文件是一样的(看下图)。寄存器可以用info r命令,看所有寄存器的值。下面栈中的值,可以用RSP栈顶指针指向的地址执行命令:x /8 0x7ffef7302130,得到的结果就是日志里面的值。

接着看日志文件下面的值,如下图:instruction表示指令PC计数器指向的地址有哪些指令,是不是想看看挂掉时候都执行了哪些指令:disassemble 0x00007f95c533d98b这条执行会把指令地址中二进制数据转换为汇编指令,并且把整个函数的指令都翻译出来,带有=>标记的那一行,就是当前执行的指令。接下来Register to memory mapping是把寄存器所指向的内存都解析成字符串,解析不了的,就是unkown了。Stack表示栈内容,Native表示本地方法,而不是Java栈,C表示C代码。

接下来Heap显示的是JVM的堆内存结构,和jmap –heap的结果类型


http://chatgpt.dhexx.cn/article/1UhigFKb.shtml

相关文章

coredump 使用总结

1. core dump简介: A core dump is the recorded state of the working memory of a computer program at a specific time, generally when the program has terminated abnormally (crashed). In practice, other key pieces of program state are usually dumped…

【linux】coredump问题排查

序言 记录coredump问题的一些定位技巧 1. coredump简介 coredump称为核心转储,就是在进程异常时的一个快照,保存了异常时的内存、寄存器、堆栈等数据当进程接收到某些 信号 而导致异常退出时,就会生成 coredump 文件core文件是ELF文件格式…

Core Dump核心转储

核心转储(core dump),在汉语中有时戏称为吐核,是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。这种信息往往用于调试。 概述 编辑 在UNIX系统中…

coredump文件的生成以及如何调试coredump文件?

生成coredump文件的相关配置 1. 首先通过 ulimit -a 命令,查看是否允许coredump文件生成; 如下图所示,core文件大小限制为0,即:不允许core文件生成 2. 使用 ulimit -c [kbytes] 命令更改core文件大小的限制 或者 通过 ulimit -c…

android生成coredump,详解coredump--全面

From: http://blog.csdn.net/tenfyguo/article/details/8159176 一,什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条…

coredump文件是如何生成的

目录 一、coredump 文件生成过程 二、coredump文件生成原理 1. 信号处理 do_signal() 2. 生成 coredump 文件 三、生产环境应该打开 coredump 功能吗? 人都会犯错,所以在编写程序时难免会出现 BUG。 有些 BUG 是业务逻辑上的错误导致的&#xff0c…

Coredump 详解

引言 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中(core文件),这种行为就叫做 Core Dump 或者叫做 ‘核心转储’,利用 coredump 可以帮助我们快速定位程序…

CoreDump追踪

当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump是“内存快照”,但实际上,除…

coredump详解

原文地址:https://blog.51cto.com/u_15471709/4868198 一,什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满…

linux之fping命令

fping检测主机是否存在,fping命令 fping类似于ping,但比ping强大。与ping要等待某一主机连接超时或发回反馈信息不同,fping给一个主机发送完数据包后,马上给下一个主机发送数据包,实现多主机同时ping,fping还可以在命令…

linux fping参数,linux下,fping命令与ping命令解析

ping Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性。 1.命令格式: ping [参数] [主机名或IP地址] 2.命令功能: ping命令用于:确定网络和各外部主机的状态;跟踪和隔离硬件和软件问题&#xf…

php fping,【Linux 命令】fping ping 包间隔时间详解

服务器间检查会用到fping的命令,期间遇到了一个问题,需要将ping包间的间隔时间设置为100毫秒,查看fping -h看下,找到了-i和-p两个参数: 看到这两个参数,我当时的表情是这样的: 看不懂,那就测吧: 先来-i: 间隔1s,没有生效.! 再试试-p OK,这个生效了,但-i 和-p的区别是…

fping使用

【-4】-ipv4仅PING IPv4地址 【-6】-ipv6仅PING IPv6地址 【-b】 指定数据,以字节发送(默认值:56) 【-c】指定发送的数量 【-f】读取一个文件里面的ip 【-g】扫描一个c段 【--ttl】设置ttl值 当这是为ttl1时,未检测到1…

linux yum fping,ping fping

通过ping来监测对端网络状态 ping fpinf在windows和linux上的参数是不同的,返回的结果也是不同的 在网络连通性监测方面用的比较多,在py go中调用命令,对返回的结果使用正则来在文本中挑出所需要的数据信息 windows中的ping参数 fping fping只…

【kali-2021.1】FPING—参数中文版(上)

目录 FPINGFPING是什么命令格式Fping用法选项介绍中文版示例1.不带选项2.设置数据包大小(1)默认情况下(2)在使用-b参数情况下 3.指定发送ping次数4.通过IP或DNS返回主机名5.通过文件获取目标6.一次ping多个目标7.设置TTL值8.指定网…

入侵检测——fping(扫描篇)

目录 环境介绍参数数据包参照组数据包(使用ping命令)windows下使用cmd发出的ping包kali在终端中发出的ping包 fping发出的数据包单个主机扫描(无回应)单个主机扫描(有回应)网段扫描 规则 环境介绍 NAT模式…

Linux C/C++ fping命令(检查主机是否存在)

ping基本上是验证网络连接的最简单工具。我们可以验证专用或公共网络中任意两个设备之间的连接。但是今天我们要讲的是fping,因为fping是一个类似ping的程序,它使用Internet控制消息协议(ICMP)回显请求来确定目标主机是否正在响应…

DeepLabV1网络简析

原论文名称:Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs 论文下载地址:https://arxiv.org/abs/1412.7062 参考源码:https://github.com/TheLegendAli/DeepLab-Context 讲解视频: https:…

DeepLab v3+原理和实现

这节课讲DeepLabv3模型,及前身DeepLabv3模型,两篇论文来自Google的同一个团队。 参考资料 DeepLabv3,被引1000 DeepLabv3,被引1000 Pytorch DeepLabv3实现,Star 1.5k 我们讲1.模型原理2.代码实现 from PIL import Im…

deeplabcut使用

cuda11.2和cudnn8.1安装 win 最新的 Win11/WIN10 安装CUDA11.2和cuDNNlinux ubuntu 16.04 安装 cuda11.2 和cudnn8.2.1 dlc安装 创建虚拟环境 安装deeplabcut2.2.3 tensorflow2.11.0 wxPython4.0.4 pip install deeplabcut2.2.3 deeplabcut里面包含了tensorflow的不用再安…