프로세스별 hugepage 사용량을 모니터링하는 방법

프로세스별 hugepage 사용량을 모니터링하는 방법

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=는 다음과 같습니다.

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

답변2

특정 프로세스의 hugepage 사용량을 보려면 다음을 실행하세요.

numastat -p PID

및 관련 프로세스 ID.

답변3

전체를 보면서/proc문서/proc/PID/smaps, 이 필드의 플래그를 통해 (파일 지원 페이지 외에도) 거대한 페이지 사용량이 ht기록 되는 것을 볼 수 있습니다 .VmFlagsAnonHugePages

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]는 정수를 나타내며 괄호를 포함하지 않습니다.

관련 정보