У меня есть выделенный веб-сервер, обслуживающий статические файлы через NFS. Сервер имеет 32 ГБ ОЗУ, но объем кэшированной памяти никогда не превышает 16 ГБ.
Я почти уверен, что SO может выделить больше, потому что в течение дня кэшированная память остается фиксированной на уровне 16 ГБ, но при запуске logrotate кэшированная память увеличивается до 30 ГБ.
Я безуспешно играл с несколькими значениями из / proc / slabinfo (nfs_direct_cache nfs_read_data nfs_inode_cache).
Любые подсказки или ссылки по этому поводу будем благодарны.
Заранее спасибо.
Если вы говорите о кешировании страниц, это возрастает в зависимости от файлов, к которым вы обращаетесь, объема данных внутри файлов, к которым вы обращались, и от того, насколько активны эти файлы.
В современных ядрах, когда файл кэшируется, он сразу же помечается как неактивный, пока не будет использован снова. Это не означает, что он удален из кеша, но в системе с более высоким давлением памяти (активные анонимно отображаемые страницы) его можно довольно быстро удалить.
Размер кеша также определяется нехваткой памяти. Это, по сути, доля от количества сканирований кеша по сравнению с количеством страниц, которые были переведены из «неактивных» в «активные» и наоборот. В зависимости от того, сколько запросов на диск потребуется для доступа к этим данным с диска. Таким образом, если сканирование и обслуживание кеша займет больше времени, чем доступ к некоторым данным с диска, не увеличивайте размер кеша страницы.
Может случиться так, что вы не создали достаточной нагрузки на память из-за доступа к файлам, чтобы диктовать использование большего количества кеша страниц, что принесло бы какую-либо пользу. Это означает, что ежедневно осуществляется доступ примерно к 16 ГБ страниц, и это не часто меняется.
Я предполагаю, что в logrotate, если файл, который вы только что последовательно читали (что приводит к 30G), был отсоединен, то страницы, которые он использовал, больше не должны быть там. Это может объяснить, почему размер кэша страницы снова уменьшается.
AFAIK это актуально только для ядер версии 2.6.28, где они изменили алгоритм управления памятью.