本发明属于内存占用统计,具体地说,是涉及一种基于linux页表统计进程的物理内存占用的方法、装置及计算机可读存储介质。
背景技术:
1、在java11发布后,发布了一项令人振奋的特性,就是zgc(垃圾回收器),此技术可以将java的gc停顿降低到1ms内,但是由于此技术的染色指针实现方式,是将多个地址映射到相同的物理页,导致linux在top统计的时候,存在重复统计,甚至出现物理内存占用翻倍的情况,导致物理内存占用情况统计不精确。
技术实现思路
1、本发明的目的在于提供一种基于linux页表统计进程的物理内存占用的方法,以解决现有技术所存在的存在重复统计、物理内存占用情况统计不精确的技术问题。
2、为了实现上述目的,本发明采取的技术方案如下:
3、一种基于linux页表统计进程的物理内存占用的方法,包括以下步骤:
4、(1)统计程序进入内核,在内核态下运行;
5、(2)通过传入的参数获取到进程结构体;
6、(3)通过所述进程结构体获取到linux页表;
7、(4)轮训所有linux页表,获取已经分配物理内存的linux页表;
8、(5)访问已经分配物理内存的linux页表的物理地址,并将物理地址暂存roaringbitmap数据结构;
9、(6)统计roaring bitmap的位数,得到统计值;
10、(7)将统计值乘以页表大小,得到进程的物理内存占用大小。
11、在一种实施方案中,所述步骤(4)中轮训所有linux页表的具体方法如下:获取到linux页表后,通过判断linux页表的present的标识来判断是否已经分配物理内存,如果没有分配物理内存,此linux页表应该跳过,如果分配物理内存,则获取已经分配物理内存的linux页表。
12、在一种实施方案中,所述步骤(5)中,在将物理地址暂存roaring bitmap数据结构之前,首先,进行linux页表的物理地址4k对齐,然后,再将linux页表的物理地址右移12位。
13、在一种实施方案中,所述步骤(5)中,根据linux页表的大小,将物理地址放入不同的roaring bitmap数据结构。
14、在一种实施方案中,所述统计程序的用户接口设计为按进程统计。
15、为实现上述目的,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行,以实现上述的基于linux页表统计进程的物理内存占用的方法。
16、为实现上述目的,本发明还提供了一种统计进程的物理内存占用的装置,包括:处理器和存储器;所述存储器用于存储计算机程序;所述处理器与所述存储器相连,用于执行所述存储器存储的计算机程序,以使得所述统计进程的物理内存占用的装置执行上述的基于linux页表统计进程的物理内存占用的方法。
17、与现有技术相比,本发明具备以下有益效果:
18、本发明将使用linux的页表,读取到真实的物理地址后,进行进程的物理内存精确统计,可以有效避免多重映射带来的内存占用重复统计问题。
1.一种基于linux页表统计进程的物理内存占用的方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于linuxlinux页表统计进程的物理内存占用的方法,其特征在于,所述步骤(4)中轮训所有linux页表的具体方法如下:获取到linux页表后,通过判断linux页表的present的标识来判断是否已经分配物理内存,如果没有分配物理内存,此linux页表应该跳过,如果分配物理内存,则获取已经分配物理内存的linux页表。
3.根据权利要求2所述的基于linuxlinux页表统计进程的物理内存占用的方法,其特征在于,所述步骤(5)中,在将物理地址暂存roaring bitmap数据结构之前,首先,进行linux页表的物理地址4k对齐,然后,再将linux页表的物理地址右移12位。
4.根据权利要求3所述的基于linuxlinux页表统计进程的物理内存占用的方法,其特征在于,所述步骤(5)中,根据linux页表的大小,将物理地址放入不同的roaring bitmap数据结构。
5.根据权利要求4所述的基于linux页表统计进程的物理内存占用的方法,其特征在于,所述统计程序的用户接口设计为按进程统计。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行,以实现如权利要求1~4中任一项所述的基于linux页表统计进程的物理内存占用的方法。
7.一种统计进程的物理内存占用的装置,其特征在于,包括:处理器和存储器;所述存储器用于存储计算机程序;所述处理器与所述存储器相连,用于执行所述存储器存储的计算机程序,以使得所述统计进程的物理内存占用的装置执行如权利要求1~4中任一项所述的基于linux页表统计进程的物理内存占用的方法。