記事ディレクトリ
1.pmapコマンド
pmap
プロセスのメモリイメージ、コンテンツからの出力、/proc/<pid>/maps
および/proc/<pid>/smaps
これら2つのファイルに関する情報を表示するコマンド。maps
ファイルには、メモリの各部分に関する説明が含まれ、smaps
各セクションの特定の詳細が含まれます。
1.1使用方法
Linuxシステムでman pmap
ヘルプファイルを表示するために使用できます。このコマンドの形式はpmap [options] pid
次のとおりです。
オプション | 特徴 |
---|---|
-x、-extended | 拡張フォーマットを表示 |
-d、-device | デバイスフォーマットを表示 |
-q、-quiet | ヘッダーと終了行を表示しない |
-A、-範囲低、高 | 指定されたアドレス範囲の結果を表示します。パラメーターはコンマで区切られます |
-バツ | -xオプションよりも詳細な情報を表示します。情報はファイルから取得されます /proc/PID/smaps |
-XX | カーネルが提供できるすべての情報を表示します |
-c、-read-rc | デフォルト設定を読む |
-V、-version | バージョン情報を表示する |
1.2例
pmap -x 7642
プロセス7642のメモリ情報を出力するコマンド。 拡張フォーマットおよびデバイスフォーマットフィールドの意味は次のとおりです。
フィールド | 意味 |
---|---|
住所 | 画像の開始アドレス |
キロバイト | 画像サイズ |
RSS | レジデントセットサイズ |
汚れた | ダーティページサイズ |
モード | 画像の権限 |
マッピング | イメージサポートファイル、[anon]にはメモリが割り当てられています[stack]はプログラムスタックです |
オフセット | ファイルオフセット |
端末 | 機器名 |
// 进程启动命令
7642: java -Xmx256m -server -XX:+PrintGCApplicationStoppedTime -jar bin/center.jar
Address Kbytes RSS Dirty Mode Mapping
0000000000400000 4 0 0 r-x-- java
0000000000600000 4 4 4 rw--- java
00000000018dc000 1208 1092 1092 rw--- [ anon ]
00000000f0000000 257536 134672 134672 rw--- [ anon ]
00000000ffb80000 4608 0 0 ----- [ anon ]
0000000100000000 12080 12052 12052 rw--- [ anon ]
0000000100bcc000 1036496 0 0 ----- [ anon ]
00007f53dda8d000 256 60 60 rw--- [ anon ]
......
2.gdbデバッグツール
gdb
この操作は、メモリダンプの指定されたアドレス範囲にツールを使用すると、サービスに影響します。注意して、メモリブロックサイズをダンプしてください。次のコマンドの意味はdumpは、プロセス13618の開始アドレスが0x7ffc0508b000、終了アドレスが0x7ffc0508b000にオフセット132000のメモリを加えたものであることを指定し、199.dumpファイルに保存します。
gdb --batch --pid 13618 -ex "dump memory 199.dump 0x7ffc0508b000 0x7ffc0508b000+132000"
メモリ開始アドレスpmap
コマンドを使用して表示できます。Address
フィールドはメモリアドレスですが、注意してください。アドレスの上位0を0x
先頭に変更する必要があります上記のこのようなダンプは、オフセット方式に0000000000400000 开始,0000000000600000 结束的内存
変換0x400000 0x600000
または使用する必要があります0x400000 0x400000+4000
ダンプファイルからは、実際には直接ビューのバイナリ形式が大量のゴミであり、strings -n 10 199.dump
10文字を超えるメモリの内容を表示するために使用できます。
- 実際、この時点でも有用な情報を確認することは困難ですが、フォローアップで
perf
はツールを使用して調査を続行できます。perf record -g -p <pid>
Ctrl + Cの終了後しばらくの間実行される、オープンモニタリング関数呼び出しスタックを使用すると、ファイルperf.dataが生成され、実行perf report -i perf.data
レポートが表示されます