Назад | Перейти на главную страницу

Необычно высокий nfs_inode_cache

На моем сервере интенсивно используется nfs_inode_cache = 11G, я пытаюсь понять, что все это потребляет, я уже знаю, что некоторые java-приложения ищут и просматривают каталоги с большим количеством записей и глубокими структурами каталогов.

Есть ли способ заглянуть в кеш-память dentry, чтобы узнать, что это за память (какие пути кэшируются)?

Вот моя команда slabtop:

   OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
8603424 8603424 100%    1.01K 2867808        3  11471232K nfs_inode_cache
3080826 3080737  99%    0.21K 171157       18    684628K dentry_cache
 24717  12515  50%    0.52K   3531        7     14124K radix_tree_node
 11365  11108  97%    0.74K   2273        5      9092K ext3_inode_cache

Вот мое давление кеша: cat / proc / sys / vm / vfs_cache_pressure 100

У вас возникли проблемы? Как выглядит использование вашей оперативной памяти? (например, free -m)

Для Linux совершенно нормально использовать любую доступную для кэширования оперативную память - часть ее будет отображаться через slabtop (dentries, inodes и т. Д.), А остальное через free -mкэшированная память (pagecache / swapcache).

/proc/sys/vm/vfs_cache_pressure контролирует пропорции, в которых ядро ​​освободит их. 100 - это "справедливое" значение по умолчанию. Уменьшение этого значения способствует сокращению кеша страниц (т. Е. Содержимого файла), а увеличение - сокращению метаданных файловой системы (индексных дескрипторов и т. Д.). В любом случае очистка кеша будет происходить только под давлением памяти; если у вас много неиспользуемой памяти, ядро ​​будет использовать ее для кэширования.

Вероятно, гораздо более важным параметром является vm.swappiness - этот контролирует поведение ядра при замене памяти вместо освобождения кэш-памяти. Значение по умолчанию подходит в большинстве случаев, но если вы видите, что процессы зависают / отключаются во время периодов интенсивного ввода-вывода с гораздо большим количеством кэшированной оперативной памяти, чем вам нужно, вы, скорее всего, захотите уменьшить это значение. Кроме того, если у вас огромный объем памяти и довольно старое ядро, вам может потребоваться настроить один из этих параметров (либо * байтов, либо * отношения, но не обоих!):

  • dirty_background_bytes
  • dirty_background_ratio
  • dirty_bytes
  • dirty_ratio

Все эти настройки полностью задокументированы здесь: https://www.kernel.org/doc/Documentation/sysctl/vm.txt

Однако, если вы не испытываете каких-либо проблем, зависания процессов, чрезмерной замены и т. Д., Я предлагаю не изменять значения по умолчанию.