gcore的学习

gcore,学习 · 浏览次数 : 229

小编点评

## gcore学习-解决jmap无法生成dump文件的一种方法背景周末在跆拳道馆看孩子练跆拳道。开着笔记本翻到了 扣钉日记 公众号里面的讲解想着自己也遇到过无法保存dump文件的情况。所以想学习一下. 进行联系其实之前也验证过宕机时的dump文件。 感觉是比较类似的。 **1. 获取 gdb 工具** * 首先使用 `yum install gdb -y` 安装 `gdb` 工具链。 **2. 获取 jmap 工具** * 使用 `which java` 命令来查询系统上安装的 `java` 版本。 * 使用 `which java` 命令来查询系统上安装的 `jmap` 版本。 * 确认 `java` 和 `jmap` 的版本相符。 **3. 获取 gcore 工具** * 使用 `rpm -e gcore-*.rpm` 命令从 rpm 包中获取 `gcore` 工具。 * 使用 `gcoreNAME gcore - Generate core files for running processes` 命令从官方网站下载 `gcore` 工具。 **4. 生成 gcore 文件** * 使用 `gcore -a [-o filename] pid[s]` 命令将 `pid` 进程列表作为参数传递给 `gcore` 工具,并指定输出文件的名称为 `filename`。 * `-a` 参数可用于指定要忽略的进程 ID, `-o filename` 参数指定输出文件的名称, `pid[s]` 参数指定要处理的进程 ID。 * 默认情况下,`gcore` 将将核心文件写入 `core.pid` 文件中。 **5. 处理 jstack 文件** * 使用 `jps` 命令查看对应进程号的 `core.1947692` 文件。 * 使用 `jmap -dump:format=b,file=heap.hprof` 命令从 `core.1947692` 文件中获取 JVM dump 文件。 **6. 分析 jmap 文件** * 使用 `mat jprofiler` 工具分析 jmap 文件,可以查看 JVM 内存的使用情况等信息。

正文

gcore的学习-解决jmap无法生成dump文件的一种方法


背景

周末在跆拳道馆看孩子练跆拳道.
开着笔记本翻到了 扣钉日记 公众号里面的讲解

想着自己也遇到过无法保存dump文件的情况.
所以想学习一下. 进行联系
其实之前也验证过宕机时的dump文件. 感觉是比较类似的. 

gcore

NAME
       gcore - Generate core files for running processes

SYNOPSIS
       gcore [-a] [-o filename] pid[s]

DESCRIPTION
       gcore  generates  a  core file for the process(es) specified by process
       IDs, pid[s]. By default, each core file is written to core.pid, in  the
       current directory.

       -a     (Linux only) ignore /proc/PID/coredump_filter and also dump mem-
              ory mappings marked with the 'VM_DONTDUMP' flag. See  info  node
              Core File Generation for longer explanation.

       -o filename
              write  core file to filename if one PID, or filename.pid if mul-
              tiple PIDs, instead of default core.pid

第一步 获取

yum install gdb -y

需要注意 gcore 是需要使用 gdb工具链的, 所以必须安装一下. 

jps 查看对应的 进程号:
注意在执行gcore 之前需要先执行一下
ulimit -c unlimited
设置 core 无限制, 不然会报错:
warning: Memory read failed for corefile section, 1048576 bytes at 0x7fb380c18000.
具体的执行命令为:
time gcore  1947692 -o core

注意这个命令非常耗时, 根据jvm占用内存大小不同而不同. 
配置好的机器速度会快一些. 

第二步 java处理

jstack `which java` core.1947692
可以进行简单的查看

time jmap -dump:format=b,file=heap.hprof `which java` core.1947692
可以使用这个命令从 core文件中获取一下对应的jvm dump 文件.

获取之后就可以使用 mat jprofiler 工具进行分析了. 

gcore的介绍

使用rpm命名查看gdb的rpm包,主要由下面几个程序:
/usr/bin/gcore
/usr/bin/gdb
/usr/bin/gdbserver
/usr/bin/gdbtui
/usr/bin/gstack

其中:
gcore 是生成core文件用的
gdb 调试用的
gdbserver 远程调试使用
gdbtui 界面化的gdb, 同 gdb -tui
gstack 查看正在运行的进程的调用栈信息

与gcore的学习相似的内容: