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

Использование памяти Linux

У нас были проблемы с использованием памяти 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, если это предложение не поможет.