Что означают разные счетчики памяти во FreeBSD?

20

Топ говорит мне:

last pid: 64807;  load averages:  0.99,  0.97,  0.92                                          up 189+04:47:22 09:16:17
45 processes:  1 running, 44 sleeping
CPU:  0.4% user,  0.0% nice,  0.2% system,  6.4% interrupt, 93.0% idle
Mem: 222M Active, 2151M Inact, 2008M Wired, 823M Buf, 3499M Free
Swap: 8192M Total, 8192M Free

Мунин показывает это немного более четко:

rtr1 ежегодное использование памяти

Как видите, на сервере установлено около 8 ГБ оперативной памяти. Интересно, смогу ли я втиснуть этого зверя в более скромный сервер на 2 ГБ . Теперь я знаю, что такое active и buffers. Но я действительно обеспокоен "проводными" и "неактивными" каплями памяти. Те, которые не соответствуют ни одному существующему процессу, насколько я знаю.

Обратите внимание, как зеленая «активная» линия выросла в декабре: именно тогда мы начали использовать демон BGP на этом маршрутизаторе. Я не совсем понимаю, что произошло в апреле и мае, но я помню, как делал обновление системы и переключался на pkgng в то время.

Вот запасной маршрутизатор для первого, с меньшим количеством оперативной памяти (4 ГБ):

rtr0 ежегодное использование памяти

Кажется, что он прекрасно работает с половиной оперативной памяти и все еще оставляет около 2 ГБ свободного места, что наводит меня на мысль, что я мог бы перейти на блок 2 ГБ для этого сервера, снижая затраты и обслуживание ...

Какие-либо предложения? Что означают различные счетчики памяти, показанные сверху? Более конкретно, что делает:

  • активный
  • Неактивный
  • кэш
  • Буферы
  • Проводная
  • Свободно

...на самом деле означает? Я нашел несколько постов, объясняющих работу подсистемы ВМ, и я помню, как "ах-ах!" Момент понимания всего этого около 12 лет назад, но я забыл. :) Даже верный справочник FreeBSD не смог ответить на мой вопрос ...

Могу ли я снизить до 2 ГБ?

anarcat
источник
Вот версия этого вопроса для Linux (поясняющая freeкоманду из procps ): linux - реальное использование памяти
Адам Кац

Ответы:

25
  • Active: Память, используемая в настоящее время процессом
  • Inactive: Память, которая была освобождена, но все еще кэшируется, поскольку она может быть использована снова. Если требуется больше Freeпамяти, эту память можно очистить и освободить. Эта память не очищается до того, как она понадобится, потому что «свободная память - это пустая трата памяти», хранение старых данных ничего не стоит, если они снова понадобятся.
  • Wired: Память используется ядром. Эта память не может быть выгружена
  • Cache: Память, используемая для кэширования данных, может быть немедленно освобождена при необходимости
  • Buffers: Дисковый кеш
  • Free: Память, которая полностью свободна и готова к использованию. Inactive, CacheИ Buffersможет стать свободным , если они очищаются.

Таким образом, вы можете просто добавить Inactiveк вашему Freeсчету и считать его неиспользованным. Wiredявляется ли память используемой ядром, включая сетевой стек. Выполнение netstat -mдаст вам сводную информацию об использовании памяти сетевым стеком.

Основываясь на ваших графиках, кроме соответствующего скачка wiredпамяти в начале марта, да, вы должны иметь возможность выполнять эту нагрузку на 2 ГБ оперативной памяти. Если вы это сделаете, рассмотрите возможность запуска i386 вместо amd64, поскольку каждое выделение памяти будет занимать меньше места, поскольку указатели будут 32-битными вместо 64-битными.

Аллан Джуд
источник
1
«Неактивная» память «Невозможно перераспределить другим процессам», поэтому ее не следует считать «неиспользованной». См. Wiki.freebsd.org/Memory
хумбадс
1
Счетчик «Неактивен» был разделен на 2 отдельных элемента в новой версии FreeBSD. «Неактивно» и «Прачечная» (память, которую все еще необходимо очистить для подкачки или диска, прежде чем ее можно будет освободить). Дополнительное объяснение здесь: lists.freebsd.org/pipermail/freebsd-arch/2016-November/…
Аллан Джуд