【性能優(yōu)化】如何使用 gdb dump 內(nèi)存

1.GDB 調試器簡介

GDB 全稱 “GNU symbolic debugger”,是 Linux 下常用的程序調試器。GDB 已經(jīng)迭代了諸多個版本,支持調試多種編程語言編寫的程序,包括 C、C++、Go、Objective-C、Rust 等。

GDB 吉祥物.png

2.如何 dump 內(nèi)存

步驟 1:獲取目標線程 id 即 Pid 的全部內(nèi)存地址

# 獲取目標線程 id
$ps -ef |grep java |grep filebeat
root     129063 128947  0 Nov07 ?        00:37:10 java -Xms128m -Xmx128m -XX:NewRatio=1 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=75 -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent -XX:+AlwaysPreTouch -XX:AutoBoxCacheMax=20000 ...省略

# 獲取目標線程 id 即 Pid 的全部內(nèi)存地址
#cat /proc/{Pid}/smaps或者pmap -x {Pid}
$pmap -x 129063
129063:   java -Xms128m -Xmx128m -XX:NewRatio=1 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=75 -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent -XX:+AlwaysPreTouch -XX:AutoBoxCacheMax=20000 ...省略
Address           Kbytes     RSS   Dirty Mode  Mapping
00000000f8000000  137856  137856  137856 rw---   [ anon ]
00000001006a0000 1041792       0       0 -----   [ anon ]
0000561c3036b000       4       0       0 r---- java
0000561c3036c000       4       0       0 r-x-- java
0000561c3036d000       4       0       0 r---- java
0000561c3036e000       4       4       4 r---- java
0000561c3036f000       4       4       4 rw--- java
0000561c307c5000     132      36      36 rw---   [ anon ]
...省略

步驟 2:獲取 Pid 中的指定內(nèi)存地址的詳情

# 獲取目標線程 id
$ps -ef |grep java |grep filebeat
root     129063 128947  0 Nov07 ?        00:37:10 java -Xms128m -Xmx128m -XX:NewRatio=1 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=75 -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent -XX:+AlwaysPreTouch -XX:AutoBoxCacheMax=20000 ...省略

# 進入 gdb dump
$gdb dump
GNU gdb (GDB) EulerOS 8.3.1-12.eulerosv2r9
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-openEuler-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
dump: No such file or directory.

# 綁定目標線程 id
(gdb) attach 129063
Attaching to process 129063
[New LWP 129066]
[New LWP 129067]
[New LWP 129068]
[New LWP 129069]
[New LWP 129070]
[New LWP 129071]
[New LWP 129080]
[New LWP 129081]
[New LWP 129082]
[New LWP 129083]
[New LWP 129084]
[New LWP 129085]
[New LWP 129086]
...省略

# dump 目標內(nèi)存地址的詳情
(gdb) dump memory /tmp/dump_memory_filebeat.bin 0x0000561c3036e000 0x0000561c3036f000

參考
GDB 調試教程:1 小時玩轉 Linux gdb 命令
GDB 使用詳細介紹

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容