У нас были проблемы с использованием памяти Linux на некоторых из наших серверов. free, top, ps и vmstat все показывают 261M из 1G (~ 25%). Однако сложение количества памяти, показанного на процесс в верхней части, показывает, что мы должны использовать очень мало памяти. Кэш имеет всего около 48 МБ и 0 КБ в буфере, так что общая доступная память составляет 309 МБ, что по-прежнему значительно меньше, чем мы должны были иметь. Я добавил снимок экрана с нашими лучшими результатами на http://www.workxpress.com/sites/default/files/top.png (по памяти). Это мой первый пост о serverfault, поэтому я не смог включить изображение в свой пост :-P
Попробовав несколько поисковых запросов в Google, я не продвинулся дальше, чем был. Большинство результатов сказали мне то же самое: память используется для кеша и буферов (что я уже знал). Но топ и бесплатный явно этого не показывают. Любая помощь приветствуется.
Спасибо,
Джеймс Армс
Обновить:
Я включаю наш / proc / meminfo из более недавнего появления этой проблемы:
MemTotal: 1028636 kB
MemFree: 30056 kB
Buffers: 0 kB
Cached: 28732 kB
SwapCached: 154684 kB
Active: 265328 kB
Inactive: 19416 kB
SwapTotal: 2097144 kB
SwapFree: 1758196 kB
Dirty: 36 kB
Writeback: 0 kB
AnonPages: 240260 kB
Mapped: 11996 kB
Slab: 23008 kB
SReclaimable: 11976 kB
SUnreclaim: 11032 kB
PageTables: 5636 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 2611460 kB
Committed_AS: 1099080 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 7204 kB
VmallocChunk: 34359731091 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Ниже наш /etc/sysctl.conf (со всеми удаленными комментариями):
kernel.printk = 4 4 1 7
kernel.maps_protect = 1
fs.inotify.max_user_watches = 524288
vm.mmap_min_addr = 65536
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
Надеюсь, это поможет.
Поскольку я вижу, что vmware-guestd запущен, я предполагаю, что это виртуальная машина. Предполагая ESX, войдите в VIC и щелкните правой кнопкой мыши машину. Нажмите Edit Settings...
и выберите Resources
таб. Нажмите Memory
и убедиться, что Unlimited
проверяется под Limit
.
Скорее всего, у вас есть ограничение на память, и когда машина использует много памяти (приближается к пределу или превышает его), гостевые инструменты vmware сохраняют память «использованной», а не возвращают ее обратно в ESX, на случай это снова нужно.
ОБНОВИТЬ:
«Сервер позволяет включать виртуальную машину только при наличии резервирования ЦП и памяти ... Когда ресурсы не используются, хост ESX Server делает их доступными для других виртуальных машин».
http://www.vmware.com/pdf/vi3_esx_resource_mgmt.pdf
Это делается с помощью драйвера «балуна» (vmmemctl), который является частью гостевых инструментов. Допустим, ваша машина использует 100 МБ оперативной памяти, затем вы запускаете какую-то программу, и она увеличивается до 500 МБ. Теперь вы останавливаете эту программу и ожидаете, что объем ОЗУ снизится до 100 МБ. Однако это не так. Это связано с тем, что для того, чтобы ESXi мог вернуть память обратно из гостевой ОС (что он делает даже при резервировании), он должен использовать драйвер балуна. Чтобы операционная система «работала» так, как будто у нее меньше памяти, драйвер балуна «использует» память, которую хочет ESXi, так что ОС не может ее использовать.
IOW, даже с оговоркой, гость использует только столько оперативной памяти хоста, сколько использует. Когда он использует больше, ESX выделяет больше оперативной памяти хоста, о чем теперь думает гость. всегда есть в наличии. Чтобы «убедить» гостя в том, что новый таран снова ушел, водитель воздушного шара использует его. Резервирование просто означает «Не запускайте виртуальную машину, если на физическом компьютере нет 1 ГБ свободного места для загрузки гостя», а не «Дайте гостю 1 ГБ, независимо от того, использует он его или нет».
Попробуйте отладить использование памяти скриптом ps_mem.py
Пытаться:
cat /proc/meminfo
Он дает более подробную информацию об использовании памяти.
У вас может быть резервирование памяти ядра. В частности, проверьте параметры огромных страниц в / proc / meminfo.
И, пожалуйста, опубликуйте свой /etc/sysctl.conf, если это предложение не поможет.