如何查找或计算Linux进程的页表大小和其他内核记帐?

我怎样才能找出Linux进程的页表有多大,以及其他任何可变大小的进程记帐?

Solutions Collecting From Web of "如何查找或计算Linux进程的页表大小和其他内核记帐?"

从Linux 2.6.10开始,单个进程的页表使用的内存量已经通过/proc/<pid>/status的VmPTE字段暴露出来了。

如果你真的对页面表感兴趣,可以做一个

 $ cat /proc/meminfo | grep PageTables PageTables: 24496 kB 

不知道有关Linux,但大多数UNIX变种提供了sysctl(3)为此目的。 还有sysctl(8)命令行工具。

嗯,回到Ye Olden Tymes,我们用nlist(3)来获取我们感兴趣的数据的系统地址,然后打开/ dev / kmem,寻找地址,然后读取数据。 不知道这是否适用于Linux,但可能值得输入“man 3 nlist”并查看返回的内容。

你应该描述你的问题,而不是询问细节。 如果你分叉太多(尤其是一个进程有一个大的地址空间)有各种各样的东西出问题(包括内存不足),打一个可分页的最大尺寸恕我直言,不是一个现实的问题。

Thad说,我也有兴趣阅读Linux中的流程分页表。

作为一个简单的经验法则,你可以假定每个进程都在页表中占有一个与其虚拟大小相同的份额,例如每个页面有6个字节。 例如,如果您有一个8GB SGA的Oracle数据库和500个进程共享它,每个进程将使用14MB的页表,这将导致7GB的pagetables + 8GB的SGA。 (来自http://kevinclosson.wordpress.com/2009/07/25/little-things-doth-crabby-make-%E2%80%93-part-ix-sometimes-you-have-to-really的样品编号-really-want-your-hugepages / )