top
どのプロセスが多くのhugepagesを使用しているかを確認しようとしていますが、hugepageの使用量を確認する単純なLinuxコマンド(例:)が見つかりません。私が見つけることができる最善は
$ 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
hugepagesが使用されているノードの粒度を教えてくれますが、プロセスごとのhugepage使用量を見たいと思います。この情報を得るためにすべてのプロセスを繰り返して特別なデバイスをcat
使用することは大丈夫です。/sys
答えがない同様の質問は次のとおりです。https://stackoverflow.com/q/25731343/364818
ところで、私はOracleを実行していません。
答え1
この問題を議論する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になります。すべて説明しました!
フィールドを合計するPerlスクリプトdirty=
は次のとおりです。
答え2
特定のプロセスの hugepage 使用量を表示するには、次の手順を実行します。
numastat -p PID
および関連プロセスID。
答え3
全体を見ながら/proc
文書/proc/PID/smaps
、このフィールドのフラグは、(ファイルサポートページに加えて)巨大なページ使用量が記録されることht
を示しています。VmFlags
AnonHugePages
grep '^VmFlags:.* ht' /proc/[0-9]*/smaps
答え4
Red Hat では以下をお勧めします**:
grep -B 11 'KernelPageSize: 2048 kB' /proc/[PID]/smaps \
| grep "^Size:" \
| awk 'BEGIN{sum=0}{sum+=$2}END{print sum/1024}'
詳細については、次を参照してください。サーバー障害に関する私の質問。
**コピーと貼り付けは難しいかもしれませんが、「KernelPageSize:」と「2048」の間に正しいスペース数を入力しないと、正しい結果が得られない可能性があります。このgrepを実行するためのより信頼できる別の方法は次のとおりです。
grep -B 11 -E 'KernelPageSize:\s+2048 kB' /proc/[PID]/smaps \
| grep "^Size:" \
| awk 'BEGIN{sum=0}{sum+=$2}END{print sum/1024}'
結果は「巨大な」行と一致する必要があります。
numastat -p [PID]
結果はMiB単位です。 [PID] は整数を表し、括弧は含まれません。