Как я могу узнать, насколько велика таблица страниц процесса Linux, наряду с любым другим учетом процессов переменного размера?
Как найти или рассчитать размер таблицы страниц процесса Linux и другой учет ядра?
Ответы (5)
Если вас действительно интересуют таблицы страниц, сделайте
$ cat /proc/meminfo | grep PageTables
PageTables: 24496 kB
Начиная с Linux 2.6.10, объем памяти, используемый таблицами страниц одного процесса, отображается через поле VmPTE /proc/<pid>/status
.
Не уверен насчет Linux, но в большинстве вариантов UNIX для эта цель. Существует также утилита командной строки sysctl(8)
.
Хммм, еще в Ye Olden Tymes мы вызывали nlist(3), чтобы получить системный адрес интересующих нас данных, затем открывали /dev/kmem, искали адрес, затем считывали данные. Не уверен, что это работает в Linux, но, возможно, стоит набрать «man 3 nlist» и посмотреть, что вернется.
Вы должны описать свою проблему, а не спрашивать о деталях. Если вы разветвляете слишком много (особенно с процессом, который имеет большое адресное пространство), есть все, что идет не так (включая нехватку памяти), достижение максимального размера таблицы страниц - ИМХО, не реальная проблема.
Тад сказал, что мне также было бы интересно прочитать общий ресурс таблицы страниц процесса в Linux.
Однако в качестве простого эмпирического правила вы можете предположить, что каждый процесс занимает долю в таблице страниц, которая равна его виртуальному размеру, например, 6 байт для каждой страницы. Так, например, если у вас есть база данных Oracle с 8 ГБ SGA и 500 процессов, совместно использующих ее, каждый из процессов будет использовать 14 МБ таблицы страниц, что приводит к 7 ГБ таблиц страниц + 8 ГБ SGA. (примеры номеров из http://kevinclosson.wordpress.com/2009/07/25/little-things-doth-crabby-make-%E2%80%93-part-ix-sometimes-you-должны-действительно-действительно-хотеть-ваши-огромные-страницы/)