web-dev-qa-db-ja.com

プロセスごとの巨大なページの使用を監視する方法

大量のHuge Pagesを使用しているプロセスを特定しようとしていますが、Huge Pageの使用状況を表示する単純なLinuxコマンド(topなど)が見つかりません。私が見つけた最高のものは

$ cat /sys/devices/system/node/node*/meminfo | fgrep Huge
Node 0 HugePages_Total:   512
Node 0 HugePages_Free:    159
Node 0 HugePages_Surp:      0
Node 1 HugePages_Total:   512
Node 1 HugePages_Free:      0
Node 1 HugePages_Surp:      0

これは、巨大なページが使用されているノードの粒度でわかりますが、プロセスごとの巨大なページの使用状況を確認したいと思います。私はすべてのプロセスを繰り返し、cating /sysこの情報を取得するための特別なデバイス。

ここで同様の質問に応答がありませんでした: https://stackoverflow.com/q/25731343/364818

ところで、私はOracleを実行していません。

4
Mark Lakata

ServerFaultでこれについて説明しているディスカッションを見つけました。基本的に、

$ Sudo grep huge /proc/*/numa_maps
/proc/4131/numa_maps:80000000 default file=/anon_hugepage\040(deleted) huge anon=4 dirty=4 N0=3 N1=1
/proc/4131/numa_maps:581a00000 default file=/anon_hugepage\040(deleted) huge anon=258 dirty=258 N0=150 N1=108
/proc/4131/numa_maps:7f6c40400000 default file=/anon_hugepage\040(deleted) huge
/proc/4131/numa_maps:7f6ce5000000 default file=/anon_hugepage\040(deleted) huge anon=1 dirty=1 N0=1
/proc/4153/numa_maps:80000000 default file=/anon_hugepage\040(deleted) huge anon=7 dirty=7 N0=6 N1=1
/proc/4153/numa_maps:581a00000 default file=/anon_hugepage\040(deleted) huge anon=265 dirty=265 N0=162 N1=103
/proc/4153/numa_maps:7f3dc8400000 default file=/anon_hugepage\040(deleted) huge
/proc/4153/numa_maps:7f3e00600000 default file=/anon_hugepage\040(deleted) huge anon=1 dirty=1 N0=1

プロセス名を取得する

$ ps 4131
  PID TTY      STAT   TIME COMMAND
 4131 ?        Sl     1:08 /var/lib/jenkins/Java/bin/Java -jar slave.jar
$ ps 4153
  PID TTY      STAT   TIME COMMAND
 4153 ?        Sl     1:09 /var/lib/jenkins/Java/bin/Java -jar slave.jar

どのプロセスが巨大なメモリを使用しているかがわかります。

$ grep HugePages /proc/meminfo
AnonHugePages:   1079296 kB
HugePages_Total:    4096
HugePages_Free:     3560
HugePages_Rsvd:      234
HugePages_Surp:        0

$ Sudo ~/bin/counthugepages.pl 4153
273 huge pages
$ Sudo ~/bin/counthugepages.pl 4131
263 huge pages

空きページ(3560)と2つのプロセス(273 + 263)のページの合計は4096です。

dirty=フィールドを合計するPerlスクリプトは次のとおりです。

https://serverfault.com/questions/527085/linux-non-transparent-per-process-hugepage-accounting/644471#644471

7
Mark Lakata

/procドキュメント 、巨大なページの使用状況が/proc/PID/smapshtVmFlagsフラグを使用し、AnonHugePagesフィールドを使用します(ファイルを使用するページを除く)。

grep '^VmFlags:.* ht' /proc/[0-9]*/smaps

Red Hatはこれをお勧めします:

grep -B 11 'KernelPageSize:2048 kB'/proc/[PID]/smaps\| grep "^ Size:"\| awk 'BEGIN {sum = 0} {sum + = $ 2} END {print sum/1024}'

詳細は serverfaultに関する私の質問 です。

1
Dan Pritts