Re: Странный рост показаний счётчика dcachesize [message #48517 is a reply to message #48488] |
Fri, 19 October 2012 13:38   |
|
Я наконец разобрался в этом вопросе и смогу популярно объяснить, что это и зачем и почему.
dcachesize контролирует размер dentry и inode кешей.
Про dentry кеш. Когда кто-то открывает какой-нибудь файл, скажем, /var/log/httpd/access_log, в dentry кеше появляются объекты для /, var, log, httpd и для access_log, то есть пять штук (впрочем, / там уже скорее всего есть). Соответственно, когда в следующий раз кто-то будет смотреть в /var/log/httpd/access/log (или просто в /var) -- ядро будет использовать этот кеш. Второе открытие (или stat, например) того же самого файла не будет приводить к увеличению кеша -- там все эти объекты уже есть.
К примеру, можно «вырастить» размер dcache командой ls -lR /, которая по-stat()-ает все имеющиеся файлы. Если запустить ls -lR / сразу ещё раз, dcache уже не подрастёт. Для обычного контейнера значение будет несколько десятков мегабайт.
Отсюда у юношей, обдумывающих житьё, возникает справедливый и каверзный вопрос -- а как тогда удаётся подрастить dcache до ужасающих значений в 12 гигабайта, если в системе нет такого количества файлов? Ага! Бага!! БАГА!!!
Нет, не бага. Дело в том, что от файла, которого НЕТ, dentry тоже кешируется (чтобы в следующий раз быстрее ответить на вопрос, есть ли такой файл). Теперь, если создавать и удалять много временных файлов (впрочем, достаточно просто генерировать рандомное имя файла и делать на него stat() или access() или open()), то можно вырастить dcache до упора.
«Упором» в данном случае может являться
-- barrier/limit бинкаунтера dcachesize в конкретном контейнере
-- barrier/limit бинкаунтера kmemsize (в него включается dcachesize)
-- limit бинкаунтера physpages (на 042stab ядре в него включается kmemsize)
-- объём свободной памяти в системе
Обычно на vswap-enabled конфигах упором является physpages или объём свободной памяти. В вашем случае, судя по всему, памяти в системе много, и кто-то делает что-то вроде создания/удаления временных файлов, вот кеш и вырастает до максимально возможного размера. Это абсолютно нормальное, правильное и разумное поведение системы.
Дальше, если памяти хватать не будет, кеш уменьшится в объёме, ядро само подропает наиболее редко используемые объекты кеша.
Это такая теория. Практика чуть позже.
Kir Kolyshkin
|
|
|