Core 文件的简单学习

core,文件,简单,学习 · 浏览次数 : 285

小编点评

## 了解jvm进程宕机分析方法 **1. 首先要了解jvm进程的运行机制,以及jvm与core文件之间的关系。** * jvm 是一个运行在操作系统内核中的虚拟机。 * core 文件是jvm进程中保存的内存快照。 * 进程创建后,jvm会动态生成一个core文件来存储内存内容。 * core 文件是系统不可改变的,且 jmp 工具用于分析core文件。 **2. 可以使用gdb工具分析core文件。** * 使用gdb 启动jvm进程,然后在终端中运行bt和bt full等命令查看堆栈信息。 * 使用jmap工具分析内存使用情况,查看java进程中各个类的内存占用情况。 * 使用jstack工具分析线程情况,查看各个线程的状态和执行顺序。 **3. 结合以上信息,可以推断出jvm进程宕机的原因,例如:** * 内存泄漏:jvm可能因为内存泄漏导致内存占用过大,导致宕机。 * 内存分配错误:jvm可能在分配内存时出现错误,导致宕机。 * 线程竞争:多个线程争夺相同的资源,导致性能下降,最终导致宕机。 **4. 通过问题来学习:** * 可以参考相关文档和博客文章,学习如何使用gdb和jmap分析core文件。 * 可以使用问题来思考jvm进程中的关键线程和内存分配过程,从而推断出潜在问题。 * 可以使用jstack分析线程状态,观察线程之间的竞争和同步关系。 **5. 建议:** * 使用jmap工具分析内存使用情况,了解java进程中各个类的内存占用情况。 * 使用jstack分析线程状态,观察各个线程的状态和执行顺序。 * 结合gdb和jmap的信息,可以快速定位jvm进程宕机的关键问题。

正文

背景

最近公司内经常出现jvm进程宕机的情况.
宕机之后没有产生jvm的dump文件.比如xxx.hprof
但是产生了 core.$pid的文件.
曾经在aarch64架构上宕机时曾经想学习一下core文件的解析
但是当时因为比较懒(现在也是)
没有深入下去.
这次简单学习几个命令. 想着能够慢慢提高自己. 
作为抛砖引玉

core文件需要的配置

一般需要 ulimit -c unlimited 才可以生成core文件
如果 ulimit -c 的返回值是 0 那么是禁止生成core文件的. 

如果想开机生效可以在
/etc/security/limits.conf 
增加设置
*   hard    core    unlimited
*   soft    core    unlimited
保存之后 重启也会继续生效.

关于core文件的说明

core文件不同于jvm的dump文件.
core文件是整个内存的映象快照, 是将整个内存全部写入到磁盘中去.

需要注意保证磁盘空间足够, 避免宕机导致业务停止. 
默认的core文件生成路径在执行文件的当前路径. 

可以通过修改 /etc/sysctl.conf 进行修改默认文件名和路径
kernel.core_pattern = /var/core_%e_%t_%p

sysctl -p 生效

注意core文件的参数含义

%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加程序名
来源: https://blog.csdn.net/weixin_45937795/article/details/126364422

gdb

分析core文件一般需要 gdb 工具
可以进行安装. 
默认系统好像都带上了.. 公司的垃圾网络也查不到对应内容.
所以暂时不进行安装的说明. 

分析java程序生成的gdb文件

1. 查看进程信息
执行的命令为:
gdb  java二进制的文件  对应的core文件
gdb /opt/gscloud/server/runtime/java/x86_64-linux/bin/java core.5989
在 (gdb) 的后面输入
bt 和 bt full 
可以查看堆栈信息. 

2. 可以使用jmap 分析内存使用情况
环境变量内部的java原生命令  java二进制文件 对应的core文件. 
jmap /opt/gscloud/server/runtime/java/x86_64-linux/bin/java core.5989

3. 使用jstack分析java的线程情况
jstack /opt/gscloud/server/runtime/java/x86_64-linux/bin/java core.5989

4. 转储为dump文件
jmap -dump:live,format=b,file=core.5989.hprof  /opt/gscloud/server/runtime/java/x86_64-linux/bin/java core.5989
会自动生成了jvm的dump文件
然后可以通过 mat 进行分析.查看宕机的问题. 

学习与体会

https://www.jianshu.com/p/2cdf71f99209
https://blog.csdn.net/weixin_45937795/article/details/126364422

参考了很多文档. 如上只是其中两个. 
感觉日常工作中会遇到各种各样的问题 
通过问题来学习是一个很好的提高自己的机会. 
希望自己能够慢慢的学习与提高. 

与Core 文件的简单学习相似的内容:

Core 文件的简单学习

背景 最近公司内经常出现jvm进程宕机的情况. 宕机之后没有产生jvm的dump文件.比如xxx.hprof 但是产生了 core.$pid的文件. 曾经在aarch64架构上宕机时曾经想学习一下core文件的解析 但是当时因为比较懒(现在也是) 没有深入下去. 这次简单学习几个命令. 想着能够慢慢

[转帖]reposync

0. 简介 reposync 命令简单来说就是可以把指定外网源(repo id)的包同步到本地文件中 1. 安装 reposync 命令 [root@V10SP1-1 ~]# yum install -y dnf-plugins-core 2. 常用选项以及参数 选项含义 -c [file] 指定配

[转帖]解析Linux gcore: 揭示程序内存捕获的秘密(linuxgcore)

https://www.dbs724.com/133618.html Linux gcore 是一种在Linux系统中使用命令行工具捕获进程内存内容的方法。它允许程序员制定程序的一个内存快照,从而帮助他们了解在特定时刻,程序的内部状态是什么状态。 通过生成一个进程的Core文件(也称为“内存快照”或

[转帖]GDB调试core文件

在Linux环境下C程序经常会出现A segmentation fault(段错误),如果我们的程序只有几十行,那么我们可以通过printf输出调试来找到哪个地方出现了异常,但如果是在项目中,如果我们还是通过print找查找错误,那么效率会很低。那么我们来学习一下Linux环境下通过core文件来找

【ASP.NET Core】在node.js上托管Blazor WebAssembly应用

由于 Blazor-WebAssembly 是在浏览器中运行的,通常不需要执行服务器代码,只要有个“窝”能托管并提供相关文件的下载即可。所以,当你有一个现成的 Blazor wasm 项目,没必要用其他语言重写,或者你不想用 ASP.NET Core 来托管(有些大材小用了),就可以试试用 node

造轮子之多语言管理

多语言也是我们经常能用到的东西,asp.net core中默认支持了多语言,可以使用.resx资源文件来管理多语言配置。但是在修改资源文件后,我们的应用服务无法及时更新,属实麻烦一些。我们可以通过扩展IStringLocalizer,实现我们想要的多语言配置方式,比如Json配置,PO 文件配置,E

.Net Core 如何数据导出 Excel?(EPPlus->OfficeOpenXml 实现固定列和动态列导出)

对于将数据以 Excel 表格文件输出,还是比较常用的,也存在诸多情况,比如列固定或不固定、数据类型为 List

Asp .Net Core 系列:国际化多语言配置

目录概述术语本地化器IStringLocalizer在服务类中使用本地化IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer资源文件区域性回退配置 CultureProvider内置的 RequestCultureProvider实现自定义 Requ

【ASP.NET Core】用配置文件来设置授权角色

在开始之前,老周先祝各个次元的伙伴们新春快乐、生活愉快、万事如意。 在上一篇水文中,老周介绍了角色授权的一些内容。本篇咱们来聊一个比较实际的问题——把用于授权的角色名称放到外部配置,不要硬编码,以方便后期修改。 由于要配置的东西比较简单,咱们并不需要存在数据库,而是用 JSON 文件配置就可以了。将

在 WPF 中集成 ASP.NET Core 和 WebView2 用于集成 SPA 应用

背景 我们有些工具在 Web 版中已经有了很好的实践,而在 WPF 中重新开发也是一种费时费力的操作,那么直接集成则是最省事省力的方法了。 修改项目文件 我们首先修改项目文件,让 WPF 项目可以包含 ASP.NET Core 的库,以及引用 WebView2 控件。