如何通过示例检查Linux中每个进程的透明HugePage使用情况

时间:2020-01-09 10:37:40  来源:igfitidea点击:

如何查看系统上实际使用的透明大页面的数量(全局或者单个进程)?如何在Linux中检查每个进程的透明大页使用情况。

如何检查哪个应用程序或者进程使用了多少HugePages。如何查找每个进程的大页面利用率。

在本文中,我将通过示例分享"检查Linux中每个进程的透明HugePage使用情况的步骤"。

首先,我们必须检查系统是否配置了大页面:

# grep -i huge /proc/meminfo
AnonHugePages:    835584 kB
HugePages_Total:   12850
HugePages_Free:       13
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

可以使用下面的方法来计算使用过的大页面。

HugePages_Total- HugePages_Free = HugePages_Used

检查系统范围内的透明HugePage使用情况

在我们检查每个进程的透明大页之前,让我们检查系统妻子THP的使用情况。通过阅读/proc/meminfo中的AnonHugePages字段,可以获得系统当前使用的匿名透明大页面的数量。

# grep AnonHugePages /proc/meminfo
AnonHugePages:    835584 kB

检查每个进程的透明HugePage使用情况

/proc/[pid]/smaps(自Linux 2.6.14起)显示了每个进程映射的内存消耗。对于每个映射,都有一系列的线。

为了确定哪些应用程序正在使用匿名透明大页面,必须读取/proc/PID/smaps并计算每个映射的AnonHugePages字段。 AnonHugePages显示透明大页面支持的内存量。如果我们已经具有要收集其THP使用情况的过程信息

# grep -e AnonHugePages  /proc/10723/smaps | awk  '{ if(>4) print 
# grep -e AnonHugePages  /proc/10723/smaps | awk  '{ if(>4) print 
# grep -e AnonHugePages  /proc/10709/smaps | awk  '{ if(>4) print 
# grep -e AnonHugePages  /proc/*/smaps | awk  '{ if(>4) print ##代码##} ' |  awk -F "/"  '{print ##代码##; system("ps -fp " )} '
} ' | awk -F ":" '{print }' | awk '{Total+=} END {print "Total AnonHugePages: " Total" Kb -"}' | awk -F "/" '{printf ##代码##; system("ps -fp 10709 -o comm= ")} ' Total AnonHugePages: 6144 Kb -polkitd
} ' | awk -F "/" '{print ##代码##; system("ps -fp 10723 -o comm=")} ' AnonHugePages: 2048 kB polkitd AnonHugePages: 6144 kB polkitd
} ' | awk -F "/" '{print ##代码##; system("ps -fp 10723")} ' AnonHugePages: 2048 kB UID PID PPID C STIME TTY TIME CMD polkitd 10723 1 0 Jul29 ? 00:00:08 /usr/lib/polkit-1/polkitd --no-debug AnonHugePages: 6144 kB UID PID PPID C STIME TTY TIME CMD polkitd 10723 1 0 Jul29 ? 00:00:08 /usr/lib/polkit-1/polkitd --no-debug

提示:

可以通过阅读/proc/meminfo中的ShmemPmdMappedShmemHugePages字段来获得映射到用户空间的文件透明大页面的数量。为了确定哪些应用程序正在映射文件透明大页面,必须读取/proc/PID/smaps并为每个映射计数FileHugeMapped字段。

这里的" 10723"是我希望获得透明大页面用法的PID。要仅获取有关命令的有限(简要)信息,我们将使用-o comm ="

##代码##

另请阅读:

如何禁用透明大页面(CentOS/RHEL 7)如何在Linux中检查透明大页面状态(禁用或者启用)?

因此,对于" polkitd"过程的两个映射,我看到它正在使用透明的大页面。现在,要获取此过程的THP使用总量,我们可以运行以下命令

##代码##

在使用THP的系统上检查每个进程(对于所有进程)的透明大页使用情况

##代码##