大量の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
これは、巨大なページが使用されているノードの粒度でわかりますが、プロセスごとの巨大なページの使用状況を確認したいと思います。私はすべてのプロセスを繰り返し、cat
ing /sys
この情報を取得するための特別なデバイス。
ここで同様の質問に応答がありませんでした: https://stackoverflow.com/q/25731343/364818
ところで、私はOracleを実行していません。
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スクリプトは次のとおりです。
/proc
ドキュメント 、巨大なページの使用状況が/proc/PID/smaps
ht
のVmFlags
フラグを使用し、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に関する私の質問 です。