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