Linux

如何監控每個程序對 Huge Pages 的使用

  • September 22, 2021

我正在嘗試確定哪個程序正在使用大量超大頁面,但我找不到簡單的 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一些/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。全部計算在內!

對欄位求和的 perl 腳本在dirty=這裡:

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

引用自:https://unix.stackexchange.com/questions/167451